有谁知道在PHP的下一个版本中是否可以使用以下表达式?
(new A())->a(); // Causes a syntax error
我觉得非常讨厌,目前必须写2行而不是1行:
$c = new A(); $c->a();
Ionuț G. Sta.. 7
第一个版本不会导致解析错误,它完全有效.第二个,实际上是不可能的,但你可以用一些编码标准轻松克服这个问题.
如果每个团队成员为每个定义的类创建一个与该类同名的函数,以及一个类似于类构造函数签名的签名,那么您将不会遇到第二个问题.例:
class Foo { public function __construct($param) {} public function bar() {} } /** * @return Foo */ function Foo($param) { return new Foo($param); } Foo()->bar();
当然,您仍然会遇到库代码问题.
第一个版本不会导致解析错误,它完全有效.第二个,实际上是不可能的,但你可以用一些编码标准轻松克服这个问题.
如果每个团队成员为每个定义的类创建一个与该类同名的函数,以及一个类似于类构造函数签名的签名,那么您将不会遇到第二个问题.例:
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();
每班不需要额外的努力.