控制器初始化方法_initialize
阿新 • • 發佈:2019-02-14
如果你的控制器類繼承了\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';
}
}
會輸出
init
hello
會輸出
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 '沒有這個動作!';
}
}