如何在新创建的对象上链接方法?

我想知道是否有办法在PHP中新创建的对象上链接方法?

像这样:

class Foo {
    public function xyz() { ... return $this; }
}

$my_foo = new Foo()->xyz();

有人知道实现这一目标的方法吗?


答案 1

在 PHP 5.4+ 中,解析器已经过修改,因此您可以执行类似操作

(new Foo())->xyz();

将实例化括在括号中,然后用链子链接起来。

在 PHP 5.4 之前,当您使用

new Classname();

语法,则无法链接方法调用实例化。这是 PHP 5.3 语法的限制。实例化对象后,可以链接起来。

我见过的一种用来解决这个问题的方法是某种静态实例化方法。

class Foo
{
    public function xyz()
    {
        echo "Called","\n";
        return $this;
    }

    static public function instantiate()
    {
        return new self();
    }
}


$a = Foo::instantiate()->xyz();

通过将对 new 的调用包装在静态方法中,可以使用方法调用实例化类,然后可以自由地将其链接起来。


答案 2

定义一个全局函数,如下所示:

function with($object){ return $object; }

然后,您将能够致电:

with(new Foo)->xyz();

推荐