Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用引用变量与公共类变量进行自定义方法调用_Php - Fatal编程技术网

Php 使用引用变量与公共类变量进行自定义方法调用

Php 使用引用变量与公共类变量进行自定义方法调用,php,Php,我遇到了一个奇怪的情况,也许你能帮助我理解这一点 $object = array('controller' => 'frontend_shop', 'method' => 'category'); include_once(PATH.'controllers/'.$object['controller'].'.php'); $controller = new $object['controller']($object); class Frontend_shop extends

我遇到了一个奇怪的情况,也许你能帮助我理解这一点

$object = array('controller' => 'frontend_shop', 'method' => 'category');

include_once(PATH.'controllers/'.$object['controller'].'.php');

$controller = new $object['controller']($object);

class Frontend_shop extends Controller {

   public $controller;

   public function __construct($object)
   {

    // Works
    $this->$object['method']();

    //Don´t work
    $this->controller = $object;
    $this->controller['method']();

    }

   public function category()
   {
       echo 'hello';
   }
}
这会起作用,并显示“hello”

    $this->$object['method']();
但是当我把这个数组赋给一个类变量时,比如:

    $this->controller = $object;
    $this->controller['method']();
我得到:

Fatal error: Call to undefined function category() in /usr/lib/app/application/controllers/frontend_shop.php on line 10

当然,我知道我可以使用第一种方法,但也许你可以用类变量的方法解释什么是错误的。谢谢

您需要这样的东西

$this->{$this->controller['method']}();
$this->controller['method']
解析为字符串(方法名称)。但是方法必须被对象调用(否则它们是函数,而不是方法),这就是其他
$this->
解析的原因

我更喜欢

$callable = array($this, $this->controller['method']);
call_user_func($callable);
我不喜欢Literal调用语法,因为您必须仔细查看代码才能了解真正的情况