如果你的控制器类继承了\think\Controller
类的话,可以定义控制器初始化方法_initialize
,在该控制器的方法调用之前首先执行。
例如:
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function _initialize()
{
echo 'init<br/>';
}
public function hello()
{
return 'hello';
}
public function data()
{
return 'data';
}
}
如果访问
http://localhost/index.php/index/Index/hello
会输出
init
hello
如果访问
http://localhost/index.php/index/Index/data
会输出
init
data
在PHP中,_initialize()方法相当于php5中的_construct()函数
其主要用于将所有公用的东西在此函数里声明!
具体应用:
class Action extends MyTpl{
private $timer;
/* 这是一个主运行方法,用户所有的访问都是通过这个方法开始运行的
* 不需要参数,没有返回值,通过这个方法加载用户的每个执行动作
*/
function run(){
$this->timer=new Timer();
//如果声明了_initialize()方法则去调用这个方法,这样用户的每个动作都通过这个方法,可以用于做权限
if(method_exists($this, '_initialize')){
$this->_initialize();
}
$act=isset($_GET["a"])?$_GET["a"]:"index";
//调用用户访问的方法,例如:admin.php?m=user&a=add去访问user模块中的add方法
if(method_exists($this,$act)){
eval('$this->'.$act.'();'); //如果$act为add,相当于$this->add();
}else{
echo '没有这个动作!';
}
}