【发布时间】:2009-01-27 08:22:23
【问题描述】:
有谁知道下一个版本的 PHP 是否可以使用以下表达式?
(new A())->a(); // Causes a syntax error
我发现目前必须写 2 行而不是 1 行,这很烦人:
$c = new A();
$c->a();
【问题讨论】:
标签: php
有谁知道下一个版本的 PHP 是否可以使用以下表达式?
(new A())->a(); // Causes a syntax error
我发现目前必须写 2 行而不是 1 行,这很烦人:
$c = new A();
$c->a();
【问题讨论】:
标签: php
第一个版本不会导致解析错误,它是完全有效的。第二个确实是不可能的,但是你可以通过一些编码标准轻松克服这样的问题。
如果每个团队成员为每个定义的类创建一个与该类同名的函数,并且签名类似于类构造函数的签名,那么您将不会遇到第二个问题。示例:
class Foo
{
public function __construct($param)
{}
public function bar()
{}
}
/**
* @return Foo
*/
function Foo($param)
{
return new Foo($param);
}
Foo()->bar();
当然,你仍然会遇到库代码的问题。
【讨论】:
new-expression 可以用作函数参数。函数调用可以用作成员访问运算符的左侧。因此,您只需要定义一个函数:
function with($object) { return $object; }
with(new A()) -> a();
每个班级都不需要额外的努力。
【讨论】:
with($my_object = new A())->a();。但这是一种绕过限制的新颖方法,谢谢!
从PHP 5.4+ 开始,这是可能的:
已添加实例化的类成员访问权限,例如(new Foo)->bar().
【讨论】: