在5.4之前的PHP版本中,我使用静态类实例化对象并立即调用所需的函数,例如:
$result = Foo::init()->bar();在上面的示例中,静态函数init()只是实例化包含它的类,并将其作为对象返回。这提供了方法链接功能,并允许我立即调用bar(),这都是在一行代码中完成的。静态函数init()看起来如下所示:
static public function init() {
$object = new self();
return $object;
}现在,PHP 5.4在实例化时增加了对类成员访问的支持,而不是使用静态类,现在我可以这样做:
$result = (new Foo)->bar();我的问题:是我使用静态类的旧方法,如果是的话,为什么?既然PHP在实例化时支持类成员访问,那么这是在对象实例化之后立即访问类成员的更正确的方法吗?
发布于 2012-07-01 21:24:36
如果这就是您的->init()所做的一切,您可以不使用(new Foo)->bar();,但是当您使用Dependancy路由时,您很可能希望创建某种工厂,以便在实例化中“注入这些缺陷”。工厂可能是一个完整的实例化对象,或者只是初学者的静态方法,但事实是:如果您现在或将来需要向类注入外部访问(数据库处理程序、设置),并且不想滥用globals或singletons (它们是某种全局的.),那么非常感谢您有一个方法/类,其中您的对象被实例化,而不是通过代码基进行分散。
发布于 2012-07-01 20:48:56
是的,新的方法更正确,所以如果你能够的话,就用它。不过,你以前的方式并不是“糟糕”,它是一个解决令人沮丧的问题的简单而干净的方法。
https://stackoverflow.com/questions/11285512
复制相似问题