我有一个函数作为:
public function controller_instance($controller_name)
{
$controller = Router::getRequestedController();
return $controller instanceof $controller_name;
}
并且我将该函数称为CCD_ 1。
这总是返回false,因为变量$controller_name
包含字符串IndexController
。
我怎样才能做到这一点?
只需从控制器字符串中创建新类
return $controller instanceof (new $controller_name());
您需要一个实例还是布尔值?
在包含方法controller_instance的同一类中创建一个数组属性,并存储所有实例
private $controllers = array();
public function controller_instance($controller_name)
{
if (isset($this->controllers[$controller_name])) {
return $this->controllers[$controller_name];
}
return $this->controllers[$controller_name] = new $controller_name();
}
示例2:使用ReflectionClass和参数
private $controllers = array();
public function controller_instance($controller_name, Array $args = array())
{
if (isset($this->controllers[$controller_name])) {
return $this->controllers[$controller_name];
}
$class = new ReflectionClass($controller_name);
$instance = $class->newInstanceArgs($args);
return $this->controllers[$controller_name] = $instance;
}