首頁 >後端開發 >php教程 >php 的反射詳解及實例分析

php 的反射詳解及實例分析

墨辰丷
墨辰丷原創
2018-06-01 14:44:071450瀏覽

本文主要介紹PHP的反射內容的知識,這裡提供相關的資料講解,及簡單範例程式碼供大家參考,有興趣的小夥伴可以參考下

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

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 這個類別回傳時某個類別的相關的訊息,例如屬性,方法,命名空間,實作那些介面等!上個例子中ReflectionClass:: getProperties 傳回是 ReflectionProperty 物件的陣列。

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 就是執行方法!

其他的物件可以看看手冊,不是很難!

那反射究竟有哪些用途?

反射是一個動態運行的概念,綜合使用他們可用來幫助我們分析其它類,接口,方法,屬性,方法和擴展。還可建構模式,例如動態代理。在一些php框架中使用反射也是很常,像是kohana,yii,下面是kohana 的實作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可以取得哪個控制器、哪個方法!然後再執行方法!

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。

相關推薦:

php微信公眾平台互動與介面詳解

php實作檔案上傳詳解

php#微信公眾號js-sdk開發應用程式

#

以上是php 的反射詳解及實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn