【发布时间】:2012-07-02 09:15:19
【问题描述】:
在 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 支持在实例化时访问类成员,这是不是在对象实例化后立即访问类成员的更正确的方式?
【问题讨论】:
-
为什么需要函数的时候还要写一个类? - 可能两者都同样糟糕:你应该有两堆对象:那些注意实例化其他对象的对象,以及那些不关心的对象。
-
我在问题中提供的代码只是一个简单的示例,用于演示我所谈论的概念。您是否介意进一步扩展您对两堆对象的评论?
-
看这里:misko.hevery.com/2008/07/08/how-to-think-about-the-new-operator,还有一个视频:youtube.com/watch?v=4F72VULWFvc - 两堆物体大约在24分钟左右,但整个视频值得一看。跨度>
标签: php object global static-methods instantiation