PHP 5.4新对象->;调用方法
我认为在PHP5.4中这是可能的PHP 5.4新对象->;调用方法,php,object,methods,Php,Object,Methods,我认为在PHP5.4中这是可能的 (new object())->method(); 但是当对象和方法都存储在类变量中时,我遇到了问题,我尝试了以下方法: new $this->object($this->params)->$this->method(); new ($this->object($this->params))->$this->method(); new $this->object($this->params)-&
(new object())->method();
但是当对象和方法都存储在类变量中时,我遇到了问题,我尝试了以下方法:
new $this->object($this->params)->$this->method();
new ($this->object($this->params))->$this->method();
new $this->object($this->params)->{$this->method}();
除非我弄错了,否则我似乎无法让它工作,而且它无法完成。谢谢您基于此测试()(更新的测试),如果您将新对象()
包装在它自己的()
中,并将方法名称包装在{}
中,它应该可以工作。因为返回对象的是表达式newobject()
,而不仅仅是对构造函数object()
的调用,所以需要将该表达式包装为()
这是超级复杂的。如果你有机会重新思考这个问题,我会这样做
public $object = 'ClassName';
public $method = 'method';
// Called as:
(new $this->object($this->params))->{$this->method}();
下面是一个使用ArrayIterator::valid()的示例:
这是一些可怕的代码,isI理解它很难理解,但这段代码没有在生产中使用。这没关系,因为它可能会在未来出现。是的,我理解这一点,我只是在胡闹而已,通过尝试和错误学习,谢谢。@ShaShads检查更新的示例。它应该真的会成功,就像在生产中一样疯狂。谢谢你,这帮了忙。
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)