在PHP中,可以实例化一个对象并在同一行上调用一个方法吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我想做的是这样的事情:

$method_result = new Obj()->method();

而不必做:

$obj = new Obj();
$method_result = $obj->method();

在我的具体情况下,结果对我来说并不重要。但是,有什么办法可以做到吗?

提问于
用户回答回答于
用户回答回答于

你不能做你所问的; 但你可以“欺骗”,使用这样一个事实,在PHP中,你可以拥有一个与类相同名称的函数; 这些名字不会冲突。

所以,如果你宣布这样的一个类:

class Test {
    public function __construct($param) {
        $this->_var = $param;
    }
    public function myMethod() {
        return $this->_var * 2;
    }
    protected $_var;
}

然后可以声明一个返回该类的实例的函数 - 并且与该类的名称完全相同:

function Test($param) {
    return new Test($param);
}

现在,使用一行代码就成为可能,就像你问的一样 - 只有你调用函数,因此不使用新的:

$a = Test(10)->myMethod();
var_dump($a);

它的工作原理:在这里,我得到:

int 20

作为输出。

而且,更好的是,你可以在你的函数中加入一些phpdoc:

/**
 * @return Test
 */
function Test($param) {
    return new Test($param);
}

扫码关注云+社区