代码之家  ›  专栏  ›  技术社区  ›  Ivan Krechetov

用PHP中的对象函数调用链接构造函数

php
  •  4
  • Ivan Krechetov  · 技术社区  · 17 年前

    有人知道下面的表达式在下一个版本的PHP中是否可行吗?

    (new A())->a();    // Causes a syntax error
    

    我觉得非常恼人的是,目前一个人必须写两行而不是一行:

    $c = new A();
    $c->a();
    
    3 回复  |  直到 9 年前
        1
  •  7
  •   Ionuț G. Stan    17 年前

    第一个版本不会导致分析错误,它是完全有效的。第二个问题确实是不可能的,但是您可以用一些编码标准轻松地解决这个问题。

    如果每个团队成员为每个定义的类创建一个与类同名的函数,以及一个与类构造函数的签名类似的签名,那么就不会有第二个问题。例子:

    class Foo
    {
        public function __construct($param)
        {}
    
        public function bar()
        {}
    }
    
    /**
     * @return Foo
     */
    function Foo($param)
    {
        return new Foo($param);
    }
    
    Foo()->bar();
    

    当然,您仍然会遇到库代码方面的问题。

        2
  •  6
  •   Victor Nicollet    16 年前

    新表达式不能用作函数参数。函数调用可以用作成员访问运算符的左侧。因此,您只需要定义一个函数:

    function with($object) { return $object; }
    
    with(new A()) -> a();
    

    每堂课不需要额外的努力。

        3
  •  1
  •   colan    9 年前

    这是可能的 PHP 5.4+ :

    已添加实例化时的类成员访问,例如.(new foo)->bar()。

    推荐文章