PHP没有函数/方法重载,所以我无法为替代构造函数创建静态方法。但是,我仍然想要一个__construct
方法,我只是不想在使用静态c'tor时调用它,所以我提出了这个:
public static function instance(\Psr\Http\Message\ResponseInterface $resp) {
/** @var static $new */
$new = (new \ReflectionClass(get_called_class()))->newInstanceWithoutConstructor();
$new->body = $resp->getBody();
$new->statusCode = $resp->getStatusCode();
$new->reasonPhrase = $resp->getReasonPhrase();
$new->protocolVersion = $resp->getProtocolVersion();
$new->setHeaders($resp->getHeaders());
return $new;
}
这有多糟糕?有什么问题需要注意吗?
答案 0 :(得分:3)
我会以一种从所有静态替代品中调用 的方式设计构造函数。可能当前的构造函数做得太多了?
但是,由于PHP 5.4 ReflectionClass
支持该方法newInstanceWithoutConstructor()
,因此没有错误。