在下面的代码中,我使用call_user_func()调用一个类.
if(file_exists('controller/' . $this->controller . '.controller.PHP')) { require('controller/' . $this->controller . '.controller.PHP'); call_user_func(array($this->controller,$this->view)); } else { echo 'error: controller not exists <br/>'. 'controller/' . $this->controller . '.controller.PHP'; }
让我们说控制器有如下代码.
class test { static function test_function() { echo 'test'; } }
当我调用call_user_func(‘test’,’test_function’)没有问题.但是当我调用一个不存在的函数时,它不起作用.现在我先检查te类测试中的函数是否存在,然后再调用函数call_user_func.
你正在寻找
method_exists
的初学者.但是,您应该检查什么也不是方法是可调用的.这是由有名的
is_callable
功能完成的:
if (method_exists($this->controller,$this->view) && is_callable(array($this->controller,$this->view))) { call_user_func( array($this->controller,$this->view) ); }
但这只是事情的开始.您的代码段包含明确的需求调用,这表明您没有使用autoloader.
更重要的是,您所做的一切都是检查file_exists,如果该类已经加载,则不会.那么你的代码会产生一个致命的错误,如果每次机会,您的代码片段被执行两次,并且$this->控制器的值相同.
至少要把这个修改为require_once
…