如何在新创建的对象上链接方法?
2022-08-30 09:50:41
我想知道是否有办法在PHP中新创建的对象上链接方法?
像这样:
class Foo {
public function xyz() { ... return $this; }
}
$my_foo = new Foo()->xyz();
有人知道实现这一目标的方法吗?
我想知道是否有办法在PHP中新创建的对象上链接方法?
像这样:
class Foo {
public function xyz() { ... return $this; }
}
$my_foo = new Foo()->xyz();
有人知道实现这一目标的方法吗?
在 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 的调用包装在静态方法中,可以使用方法调用实例化类,然后可以自由地将其链接起来。
定义一个全局函数,如下所示:
function with($object){ return $object; }
然后,您将能够致电:
with(new Foo)->xyz();