這篇文章主要介紹了thinkphp控制器調度使用示例,需要的朋友可以參考下
1.如何通過地址欄參數來得到模塊名稱和控制器名稱(即使在有路由和開了重寫模塊的情況下) 2.tp是如何實現前置,後置方法功能模塊,和如何執行帶參數的方法? php系統自帶的 ReflectionClass,ReflectionMethod 類,可以反射用戶自定義類的中屬性,方法的權限和參數等信息,通過這些信息可以准確的控制方法的執行 ReflectionClass主要用的方法: hasMethod(string) 是否存在某個方法 getMethod(string) 獲取方法 ReflectionMethod 主要方法: getNumberOfParameters() 獲取參數個數 getParamters() 獲取參數信息 3.代碼演示 代碼如下: <?php class IndexAction{ public function index(){ echo 'index'."rn"; } public function test($year=2012,$month=2,$day=21){ echo $year.'--------'.$month.'-----------'.$day."rn"; } public function _before_index(){ echo __FUNCTION__."rn"; } public function _after_index(){ echo __FUNCTION__."rn"; } } //執行index方法 $method = new ReflectionMethod('IndexAction','index'); //進行權限判斷 if($method->isPublic()){ $class = new ReflectionClass('IndexAction'); //執行前置方法 if($class->hasMethod('_before_index')){ $beforeMethod = $class->getMethod('_before_index'); if($beforeMethod->isPublic()){ $beforeMethod->invoke(new IndexAction); } } $method->invoke(new IndexAction); //執行後置方法 if($class->hasMethod('_after_index')){ $beforeMethod = $class->getMethod('_after_index'); if($beforeMethod->isPublic()){ $beforeMethod->invoke(new IndexAction); } } } //執行帶參數的方法 $method = new ReflectionMethod('IndexAction','test'); $params = $method->getParameters(); foreach($params as $param ){ $paramName = $param->getName(); if(isset($_REQUEST[$paramName])) $args[] = $_REQUEST[$paramName]; elseif($param->isDefaultValueAvailable()) $args[] = $param->getDefaultValue(); } if(count($args)==$method->getNumberOfParameters()) $method->invokeArgs(new IndexAction,$args); else echo 'parameters is not match!';