91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php的反射概念及代碼分享

發布時間:2021-08-25 22:26:48 來源:億速云 閱讀:94 作者:chen 欄目:開發技術

這篇文章主要介紹“php的反射概念及代碼分享”,在日常操作中,相信很多人在php的反射概念及代碼分享問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”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的反射概念及代碼分享”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

金沙县| 阿克苏市| 西青区| 泉州市| 鹿邑县| 炎陵县| 淅川县| 阿克苏市| 温泉县| 双峰县| 鄢陵县| 井陉县| 巩留县| 平和县| 油尖旺区| 上蔡县| 芒康县| 白城市| 科尔| 根河市| 九龙坡区| 滨海县| 长垣县| 福泉市| 达尔| 邮箱| 太谷县| 阿勒泰市| 台东市| 北安市| 于都县| 东乌珠穆沁旗| 集贤县| 静安区| 乌鲁木齐市| 大关县| 鄄城县| 栾城县| 梁山县| 墨竹工卡县| 古浪县|