1

我认为在 php 5.4 中这是可能的

(new object())->method();

但是当对象和方法都存储在类变量中时我遇到了麻烦我尝试了以下方法,

new $this->object($this->params)->$this->method();
new ($this->object($this->params))->$this->method();
new $this->object($this->params)->{$this->method}();

除非我弄错了并且无法完成,否则我似乎无法使其正常工作。谢谢

4

1 回答 1

3

基于这个测试(http://codepad.viper-7.com/mcPvpG)(更新的测试),如果你将new object()它自己包装起来,它应该可以工作(),并将方法名称包装在{}. 因为它是new object()返回对象的表达式,而不仅仅是对构造函数的调用,所以object()该表达式需要被包装为().

不过,这非常令人费解。如果您有机会重新考虑这一点,我会这样做。

public $object = 'ClassName';
public $method = 'method';

// Called as:
(new $this->object($this->params))->{$this->method}();

这是一个使用示例ArrayIterator::valid()

class instantiator {
    public $object = "ArrayIterator";
    public $method = "valid";
    public $params = array(1,2,3);

    public function do_it() {
        var_dump((new $this->object($this->params))->{$this->method}());
    }
}

$i = new instantiator();
$i->do_it();
// Prints bool(true)
于 2013-03-03T19:09:47.243 回答