久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

thinkPHP基于反射實現鉤子的方法分析

這篇文章主要介紹了thinkPHP基于反射實現鉤子的方法,結合實例形式分析了php基于系統自帶的ReflectionClass、ReflectionMethod 類與函數實現鉤子功能的相關操作技巧,需要的朋友可以參考下

本文實例講述了thinkPHP基于反射實現鉤子的方法。分享給大家供大家參考,具體如下:

ThinkPHP框架的控制器模塊是如何實現 前控制器、后控制器,及如何執行帶參數的方法?

PHP系統自帶的 ReflectionClass、ReflectionMethod 類,可以反射用戶自定義類的中屬性,方法的權限和參數等信息,通過這些信息可以準確的控制方法的執行。

ReflectionClass:

主要用的方法:

hasMethod(string)  是否存在某個方法
getMethod(string)  獲取方法

ReflectionMethod:

主要方法:

isPublic()    是否為 public 方法
getNumberOfParameters()  獲取參數個數
getParamters()  獲取參數信息
invoke( object $object [, mixed $parameter [, mixed $... ]] ) 執行方法
invokeArgs(object obj, array args)  帶參數執行方法

實例演示

<?php
class BlogAction {
  public function detail() {
    echo 'detail' . "\r\n";
  }
  public function test($year = 2014, $month = 4, $day = 21) {
    echo $year . '--' . $month . '--' . $day . "\r\n";
  }
  public function _before_detail() {
    echo __FUNCTION__ . "\r\n";
  }
  public function _after_detail() {
    echo __FUNCTION__ . "\r\n";
  }
}
// 執行detail方法
$method = new ReflectionMethod('BlogAction', 'detail');
$instance = new BlogAction();
// 進行權限判斷
if ($method->isPublic()) {
  $class = new ReflectionClass('BlogAction');
  // 執行前置方法
  if ($class->hasMethod('_before_detail')) {
    $beforeMethod = $class->getMethod('_before_detail');
    if ($beforeMethod->isPublic()) {
      $beforeMethod->invoke($instance);
    }
  }
  $method->invoke(new BlogAction);
  // 執行后置方法
  if ($class->hasMethod('_after_detail')) {
    $beforeMethod = $class->getMethod('_after_detail');
    if ($beforeMethod->isPublic()) {
      $beforeMethod->invoke($instance);
    }
  }
}
// 執行帶參數的方法
$method = new ReflectionMethod('BlogAction', '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($instance, $args);
} else {
  echo 'parameters is wrong!';
}

另一段代碼參考

/**
 * 執行App控制器
 */
public function execApp() {
  // 創建action控制器實例
  $className = MODULE_NAME . 'Controller';
  $namespaceClassName = '\\apps\\' . APP_NAME . '\\controller\\' . $className;
  load_class($namespaceClassName, false);
  if (!class_exists($namespaceClassName)) {
    throw new \Exception('Oops! Module not found : ' . $namespaceClassName);
  }
  $controller = new $namespaceClassName();
  // 獲取當前操作名
  $action = ACTION_NAME;
  // 執行當前操作
  //call_user_func(array(&$controller, $action)); // 其實吧,用這個函數足夠啦?。。?
  try {
    $methodInfo = new \ReflectionMethod($namespaceClassName, $action);
    if ($methodInfo->isPublic() && !$methodInfo->isStatic()) {
      $methodInfo->invoke($controller);
    } else { // 操作方法不是public類型,拋出異常
      throw new \ReflectionException();
    }
  } catch (\ReflectionException $e) {
    // 方法調用發生異常后,引導到__call方法處理
    $methodInfo = new \ReflectionMethod($namespaceClassName, '__call');
    $methodInfo->invokeArgs($controller, array($action, ''));
  }
  return;
}

更多關于thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。

希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP類的反射來實現依賴注入過程以及相關知識點分享,對此有興趣的朋友跟著小編學習下吧。
這篇文章主要介紹了ThinkPHP實現轉換數據庫查詢結果數據到對應類型的方法,涉及thinkPHP模型類操作及針對源碼文件的相關修改方法,需要的朋友可以參考下
這篇文章主要介紹了thinkPHP中鉤子的使用方法,結合實例形式分析了thinkPHP鉤子的創建、添加、使用等相關操作技巧與注意事項,需要的朋友可以參考下
這篇文章主要介紹了thinkphp5.0驗證類的簡單有效的使用方法,一起學習下。
本文主要講了thinkphp5.0版本中自定義驗證規則的使用方法和一些注意事項。
這篇文章主要介紹了thinkPHP通用控制器實現方法,結合實例形式分析了thinkPHP針對數據庫的基本CURD操作方法的封裝實現技巧,需要的朋友可以參考下
主站蜘蛛池模板: 99免费精品 | 中文字幕一区在线观看视频 | 国产免费av网 | 午夜影院在线观看视频 | 久久久久久久国产精品视频 | 欧洲高清转码区一二区 | 精品综合网 | 国产真实精品久久二三区 | 黄色av网站在线免费观看 | 中文字幕视频一区 | 亚洲高清在线观看 | 中文字幕高清免费日韩视频在线 | 国产成人高清视频 | 久久久久国产 | 久久国产精品首页 | 亚洲 一区 | 亚洲欧洲一区二区 | 久久久久久久久久一区 | 国产精品一区二区久久 | 国产不卡在线观看 | 亚洲一区免费 | 国产www.| 日韩三级视频 | 亚洲一区二区中文字幕 | 日韩一级黄色片 | 色综网| 欧美一级在线观看 | 婷婷五月色综合香五月 | 色综合色综合色综合 | 欧美色人 | 亚洲精品一区二区在线 | 亚洲精品www. | 久久久久久国产精品免费免费 | 天天躁日日躁狠狠很躁 | 天天操综合网站 | 日韩欧美亚洲 | 久久久精品综合 | 男人天堂手机在线视频 | 91国在线| av网站在线免费观看 | 久草在线影|