最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php 的反射詳解及示例代碼

 更新時間:2016年08月25日 15:44:03   作者:撣塵  
本文主要介紹PHP的反射內容的知識,這里提供相關的資料講解,及簡單示例代碼供大家參考,有興趣的小伙伴可以參考下

 最近在看java編程思想,看到類型信息這一章,講到了類的信息以及反射的概念。順便溫故一下php的反射東西。手冊是這樣說的:"PHP 5 具有完整的反射 API,添加了對類、接口、函數(shù)、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數(shù)、類和方法中的文檔注釋。"當然手冊上說的有些抽象!所謂的逆向說白就是能獲取關于類、方法、屬性、參數(shù)等的詳細信息,包括注釋! 文字總是那么枯燥,舉個例子

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$props = $ref->getProperties();
foreach ($props as $value) {
  echo $value->getName()."\n";
}

//output
//foo 
//bar
//baz 


ReflectionClass 這個類返回時某個類的相關的信息,比如 屬性,方法,命名空間,實現(xiàn)那些接口等!上個例子中ReflectionClass:: getProperties 返回是 ReflectionProperty 對象的數(shù)組。

ReflectionProperty 類報告了類的屬性的相關信息。比如  isDefault isPrivate  isProtected isPublic isStatic等,方法getName 是獲取屬性的名稱!

以上是獲取屬性的,還有獲取類方法的比如

class Foo {
  public  $foo = 1;
  protected $bar = 2;
  private  $baz = 3;
  
  /**
   * Enter description here ...
   */
  public function myMethod()
  {
    echo 'hello 2b';
  }
}

$ref = new ReflectionClass('Foo');
$method = $ref->getMethod('myMethod');
$method->invoke($ref->newInstance());

ReflectionClass::getMethod 是反是一個 ReflectionMethod 類型 ,ReflectionMethod 類報告了一個方法的有關信息,比如 isAbstract isPrivate  isProtected isPublic isStatic   isConstructor,還有一個重要的方法Invoke,InvokeArgs 就是執(zhí)行方法!

其他的對象可以看看手冊,不是很難!

那反射究竟有哪些用途?

反射是一個動態(tài)運行的概念,綜合使用他們可用來幫助我們分析其它類,接口,方法,屬性,方法和擴展。還可構建模式,比如動態(tài)代理。在一些php框架中使用反射也是很經常,比如kohana,yii,下面是kohana 的實現(xiàn)mvc的代碼,就是用到了反射!

// Start validation of the controller
$class = new ReflectionClass(ucfirst(Router::$controller).'_Controller');
// Create a new controller instance
$controller = $class->newInstance();
// Load the controller method
$method = $class->getMethod(Router::$method);
// Execute the controller method
$method->invokeArgs($controller, $arguments);

上面的代碼可以清晰看到這個框架的流程!通過Router 其實就處理url的類,通過Router可以獲取哪個控制器、哪個方法!然后再執(zhí)行方法!

以上就是對PHP 反射的資料整理,后續(xù)繼續(xù)補充相關資料,謝謝大家對本站的支持!

相關文章

最新評論

宜宾市| 曲沃县| 诸暨市| 修武县| 贵溪市| 兴宁市| 湖北省| 锦屏县| 宁明县| 南江县| 通渭县| 仪征市| 浦东新区| 揭西县| 兴隆县| 孟州市| 雷州市| 株洲县| 江口县| 阳春市| 乐陵市| 南汇区| 阿克陶县| 偏关县| 玛沁县| 辽源市| 黄大仙区| 疏勒县| 新干县| 嵊州市| 吐鲁番市| 都江堰市| 宜都市| 涿州市| 淅川县| 长顺县| 扬州市| 丰城市| 建宁县| 法库县| 阳曲县|