繁体   English   中英

静态类与类成员在实例化时的访问

[英]Static classes vs class member access on instantiation

在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支持实例化访问类成员,这是在对象实例化之后立即访问类成员的更正确方法吗?

是的,新方法更正确,因此请尽可能使用它。 但是,您以前拥有它的方式并不“糟糕”; 这是一个令人沮丧的简单,干净的解决方案。

如果这就是您的->init()所做的全部,那么您就可以摆脱(new Foo)->bar(); ,但是当您使用“依赖项注入”路线时,您最有可能希望创建某种Factory来在实例化中“注入那些依赖”。 工厂可能是一个完整的实例化对象,或者仅仅是初学者的静态方法,但是事实是:如果您现在或将来可能需要将外部访问注入到您的类(数据库处理程序,设置)中,而您不需要如果您不想滥用全局变量或单例变量(它们是某种全局变量...),您将非常感激您拥有一个方法/类,在该方法/类中实例化对象,然后在代码库中进行遍历。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM