程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php反射類 ReflectionClass

php反射類 ReflectionClass

編輯:關於PHP編程

       什麼是php反射類,顧名思義,可以理解為一個類的映射。

      舉個例子:

      class fuc { //定義一個類

      static function ec() {

      echo '我是一個類';

      }

      }

      $class=new ReflectionClass('fuc'); //建立 fuc這個類的反射類

      echo $class; //輸出這反射類

      Class [ class A ] { @@ F:phpwebmyPHPtest.php 23-30 - Constants [0] { } - Static properties [0] { } - Static methods [0] { } - Properties [0] { } - Methods [1] { Method [ public method __construct ] { @@ F:phpwebmyPHPtest.php 26 - 29 } } }

      $fuc=$class->newInstance(); //相當於實例化 fuc 類

      $fuc->ec(); //執行 fuc 裡的方法ec

      /*最後輸出:我是一個類*/

      其中還有一些更高級的用法

      $ec=$class->getmethod('ec'); //獲取fuc 類中的ec方法

      $fuc=$class->newInstance(); //實例化

      $ec->invoke($fuc); //執行ec 方法

      上面的過程很熟悉吧。其實和調用對象的方法類似

      只不過這裡是反著來的,方法在前,對象在後

      舉例

      try{

      //如果存在控制器名字的類

      if(class_exists($this->getController())) {

      //利用反射api構造一個控制器類對應的反射類

      $rc = new ReflectionClass($this->getController());

      //如果該類實現 了IController接口

      if($rc->implementsInterface('IController')) {

      //該類擁有解析後的action字符串所指向的方法名

      if($rc->hasMethod($this->getAction())) {

      //構造一個控制器類的實例

      $controller = $rc->newInstance();

      //獲取該類$action參數所指向的方法對象

      $method = $rc->getMethod($this->getAction());

      //反射類方法對象的調用方式:

      $method->invoke($controller);

      } else {

      //以下為可能拋出異常

      throw new Exception("Action");

      }

      } else {

      throw new Exception("Interface");

      }

      } else {

      throw new Exception("Controller");

      }

      }catch(exception $e)

      {

      echo $e;

      }

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved