我试图调用存储的方法$_auto
,但它不会工作。
<?php
class Index {
private $_auto;
public function __construct() {
$this->_auto = "index";
$this->_auto();
}
public function index() {
echo "index";
}
}
$index = new Index();
?>
您需要使用call_user_func
做到这一点:
call_user_func(array($this, $this->_auto));
不幸的是PHP不允许直接使用属性值作为可调用 。
还有一个窍门,你可以用它来自动调用可调用这个样子。 我不知道我会赞同,但在这里。 收藏此实施__call
到类:
public function __call($name, $args)
{
if (isset($this->$name) && is_callable($this->$name)) {
return call_user_func_array($this->$name, $args);
}
else {
throw new \Exception("No such callable $name!");
}
}
这将允许您调用可调用,这样你就可以拨打免费的功能:
$this->_auto = 'phpinfo';
$this->_auto();
和类方法:
$this->_auto = array($this, 'index');
$this->_auto();
当然,你可以通过调整哪些定制此行为__call
调用。
你的代码试图调用一个名为“_auto”的方法。 要做到你的要求,你想方法名沿其他海报所说的话的线条一个PHP变量或东西。
class Foo {
private function _auto() {
echo "index";
}
public function callmethod($method) {
$this->$method();
}
}
$foo = new Foo();
$foo->callmethod('_auto');
你不会有一个名为方法_auto()
你只有一个属性名为$_auto
。 如果你的目的是要一个未定义的方法(如果存在)返回一个类似命名的特性打电话,那么你就需要写一个__call()
魔术方法来执行的看着类似命名的特性和返回值的逻辑。 因此,像这样将需要添加到您的类:
public function __call($called_method, $arguments) {
if(property_exists($this, $called_method)) {
return $this->{$called_method};
} else {
throw new Exception('Illegal method call.');
}
}
我想你误定义“_auto”作为财产?
尝试使用:
private function _auto(){}
代替
private $_auto