使用newInstanceWithoutConstructor替代构造函数

时间:2015-04-17 18:20:13

标签: php

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;
}

这有多糟糕?有什么问题需要注意吗?

1 个答案:

答案 0 :(得分:3)

我会以一种从所有静态替代品中调用 的方式设计构造函数。可能当前的构造函数做得太多了?

但是,由于PHP 5.4 ReflectionClass支持该方法newInstanceWithoutConstructor(),因此没有错误