詳解php中反射的應用,詳解php反射應用_PHP教程

來源:互聯網
上載者:User

詳解php中反射的應用,詳解php反射應用


反射是在PHP運行狀態中,擴充分析PHP程式,匯出或提取出關於類、方法、屬性、參數等的詳細資料,包括注釋。這種動態擷取的資訊以及動態調用對象的方法的功能稱為反射API。反射是操縱物件導向範型中元模型的API,其功能十分強大,可協助我們構建複雜,可擴充的應用。
其用途如:自動載入外掛程式,自動產生文檔,甚至可用來擴充PHP語言。
php反射api由若干類組成,可協助我們用來訪問程式的中繼資料或者同相關的注釋互動。藉助反射我們可以擷取諸如類實現了那些方法,建立一個類的執行個體(不同於用new建立),調用一個方法(也不同於常規調用),傳遞參數,動態調用類的靜態方法。
反射api是php內建的oop技術擴充,包括一些類,異常和介面,綜合使用他們可用來協助我們分析其它類,介面,方法,屬性,方法和擴充。這些oop擴充被稱為反射。
通過ReflectionClass,我們可以得到Person類的以下資訊:

1)常量 Contants
2)屬性 Property Names
3)方法 Method Names靜態
4)屬性 Static Properties
5)命名空間 Namespace
6)Person類是否為final或者abstract

然後就去看了看thinkphp的源碼,對於MVC的實現也有不同的體驗 ThinkPHP\Lib\Core\App.class.php 中的exec方法

if(!preg_match('/^[A-Za-z](\w)*$/',$action)){    // 非法操作    throw new ReflectionException();   }   //執行當前操作   $method = new ReflectionMethod($module, $action); #查看方法   if($method->isPublic()) {    $class = new ReflectionClass($module); #反射控制器    // 前置操作    if($class->hasMethod('_before_'.$action)) {     $before = $class->getMethod('_before_'.$action);     if($before->isPublic()) {      $before->invoke($module);     }    }    // URL參數綁定檢測    if(C('URL_PARAMS_BIND') && $method->getNumberOfParameters()>0){     switch($_SERVER['REQUEST_METHOD']) {      case 'POST':       $vars = $_POST;       break;      case 'PUT':       parse_str(file_get_contents('php://input'), $vars);       break;      default:       $vars = $_GET;     }     $params = $method->getParameters();     foreach ($params as $param){      $name = $param->getName();      if(isset($vars[$name])) {       $args[] = $vars[$name];      }elseif($param->isDefaultValueAvailable()){       $args[] = $param->getDefaultValue();      }else{       throw_exception(L('_PARAM_ERROR_').':'.$name);      }     }     $method->invokeArgs($module,$args);    }else{     $method->invoke($module); #執行我們需要調用函數    }    // 後置操作    if($class->hasMethod('_after_'.$action)) {     $after = $class->getMethod('_after_'.$action);     if($after->isPublic()) {      $after->invoke($module);     }    }

以上就是關於php中反射的應用,希望對大家理解學習php反射有所協助。

您可能感興趣的文章:

  • PHP 反射機制實現動態代理的代碼
  • 在PHP中使用反射技術的架構外掛程式使用說明
  • 解析php中反射的應用
  • PHP反射類ReflectionClass和ReflectionObject的使用方法
  • PHP反射使用執行個體和PHP反射API的中文說明
  • PHP的反射類ReflectionClass、ReflectionMethod使用執行個體
  • PHP反射機制用法執行個體
  • PHP類的反射用法執行個體

http://www.bkjia.com/PHPjc/1110066.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1110066.htmlTechArticle詳解php中反射的應用,詳解php反射應用 反射是在PHP運行狀態中,擴充分析PHP程式,匯出或提取出關於類、方法、屬性、參數等的詳細資料,...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.