基于这个测试(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)