萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> thinkphp控制器調度使用示例

thinkphp控制器調度使用示例

 這篇文章主要介紹了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!';    
copyright © 萬盛學電腦網 all rights reserved