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

时间:2012-05-16 18:28:11

标签: php

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

$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';
   }
}

这样可以显示“你好”

    $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

当然我知道我可以使用第一种方法,但也许你可以解释一下,在类变量的方法中可能出错了。感谢

1 个答案:

答案 0 :(得分:3)

你需要像

这样的东西
$this->{$this->controller['method']}();

$this->controller['method']解析为字符串(方法名称)。但必须在一个对象上调用方法(否则它们是函数,而不是方法),以及其他$this->分辨率的来源。

我更喜欢

$callable = array($this, $this->controller['method']);
call_user_func($callable);

我不喜欢litteral调用语法,因为你必须仔细查看代码才能看到真正发生的事情。

http://php.net/manual/en/function.call-user-func.php

http://www.php.net/manual/en/language.types.callable.php