2

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

4

2 回答 2

3

是的,新方法更正确,所以如果可以的话,请使用它。不过,您以前拥有它的方式并不“糟糕”。这是一个干净、简单的解决方案,可以解决令人沮丧的问题。

于 2012-07-01T20:48:56.633 回答
1

如果这就是你->init()所做的一切,你可以逃脱(new Foo)->bar();,但是当你走依赖注入路线时,你很可能想要创建某种工厂来在实例化时“注入那些依赖”。工厂可能是一个完整的实例化对象,或者只是初学者的静态方法,但事实是:如果您现在或将来需要将外部访问注入到您的类(数据库处理程序、设置)中,而您不需要不想滥用全局变量或单例(这是一种全局变量......),您将非常感谢您有 1 个方法/类,您的对象在其中被实例化,而不是散布在代码库中。

于 2012-07-01T21:24:36.790 回答