首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态类对类成员的实例化访问

问静态类对类成员的实例化访问
EN

Stack Overflow用户
提问于 2012-07-01 20:46:23
回答 2查看 347关注 0票数 2

在5.4之前的PHP版本中,我使用静态类实例化对象并立即调用所需的函数,例如:

代码语言:javascript
复制
$result = Foo::init()->bar();

在上面的示例中,静态函数init()只是实例化包含它的类,并将其作为对象返回。这提供了方法链接功能,并允许我立即调用bar(),这都是在一行代码中完成的。静态函数init()看起来如下所示:

代码语言:javascript
复制
static public function init() {
   $object = new self();
   return $object;
}

现在,PHP 5.4在实例化时增加了对类成员访问的支持,而不是使用静态类,现在我可以这样做:

代码语言:javascript
复制
$result = (new Foo)->bar();

我的问题:是我使用静态类的旧方法,如果是的话,为什么?既然PHP在实例化时支持类成员访问,那么这是在对象实例化之后立即访问类成员的更正确的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-01 21:24:36

如果这就是您的->init()所做的一切,您可以不使用(new Foo)->bar();,但是当您使用Dependancy路由时,您很可能希望创建某种工厂,以便在实例化中“注入这些缺陷”。工厂可能是一个完整的实例化对象,或者只是初学者的静态方法,但事实是:如果您现在或将来需要向类注入外部访问(数据库处理程序、设置),并且不想滥用globals或singletons (它们是某种全局的.),那么非常感谢您有一个方法/类,其中您的对象被实例化,而不是通过代码基进行分散。

票数 1
EN

Stack Overflow用户

发布于 2012-07-01 20:48:56

是的,新的方法更正确,所以如果你能够的话,就用它。不过,你以前的方式并不是“糟糕”,它是一个解决令人沮丧的问题的简单而干净的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11285512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档