站長資訊網
最全最豐富的資訊網站

手寫PHP API框架(三)之反射介紹

上一篇《手寫PHP API框架之Composer的安裝使用(二)》文章中我們介紹了Composer的安裝使用,這一文我們來介紹一下有關反射的概念介紹。

反射,直觀理解就是根據到達地找到出發地和來源。 反射指在PHP運行狀態中,擴展分析PHP程序,導出或提出關于類、方法、屬性、參數等的詳細信息,包括注釋。這種動態獲取信息以及動態調用對象方法的功能稱為反射API。

不妨先來看一個demo:

<?php   function p($msg, $var) {     echo($msg.":".print_r($var, true)).PHP_EOL.PHP_EOL; }   class Demo {     private $id;      protected $name;      public $skills = [];      public function __construct($id, $name, $skills = [])     {         $this->id = $id;         $this->name = $name;         $this->skills = $skills;     }      public function getName()     {         return $this->name;     }     public function getSkill()     {         p('skill', $this->skills);     } }   $ref = new ReflectionClass('Demo'); if ($ref->isInstantiable()) {     p('檢查類是否可實例化isInstantiable', null); } $constructor = $ref->getConstructor(); p('獲取構造函數getConstructor', $constructor);  $parameters = $constructor->getParameters(); foreach ($parameters as $param) {     p('獲取參數getParameters', $param); }  if ($ref->hasProperty('name')) {     $attr = $ref->getProperty('name');     p('獲取屬性getProperty', $attr); }  $attributes = $ref->getProperties(); foreach ($attributes as $row) {     p('獲取屬性列表getProperties', $row->getName()); }  if ($ref->hasMethod('getSkill')) {     $method = $ref->getMethod('getSkill');     p('獲取方法getMethod', $method); }  $methods = $ref->getMethods(); foreach ($methods as $row) {     p('獲取方法列表getMethods', $row->getName()); }  $instance = $ref->newInstanceArgs([1, 'sai', ['php', 'js']]); p('newInstanceArgs', $instance);
登錄后復制

輸出:

?  php git:(main) php reflect.php   檢查類是否可實例化isInstantiable:  獲取構造函數getConstructor:ReflectionMethod Object (     [name] => __construct     [class] => Demo )   獲取參數getParameters:ReflectionParameter Object (     [name] => id )   獲取參數getParameters:ReflectionParameter Object (     [name] => name )   獲取參數getParameters:ReflectionParameter Object (     [name] => skills )   獲取屬性getProperty:ReflectionProperty Object (     [name] => name     [class] => Demo )   獲取屬性列表getProperties:id  獲取屬性列表getProperties:name  獲取屬性列表getProperties:skills  獲取方法getMethod:ReflectionMethod Object (     [name] => getSkill     [class] => Demo )   獲取方法列表getMethods:__construct  獲取方法列表getMethods:getName  獲取方法列表getMethods:getSkill  newInstanceArgs:Demo Object (     [id:Demo:private] => 1     [name:protected] => sai     [skills] => Array         (             [0] => php             [1] => js         )  )
登錄后復制

demo里面就有使用了ReflectionClass類,當然ReflectionClass類不止于這些方法。

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
三上悠亚日韩精品一区在线| 国产午夜亚洲精品午夜鲁丝片| 无码国产精品一区二区免费| 国产精品 一区 在线| 99精品国产高清一区二区| 无码区日韩特区永久免费系列| 在线精品视频播放| 国产精品香蕉在线| 中文日韩字幕一区在线观看| 嫖妓丰满肥熟妇在线精品| 这里只有精品视频在线| 无码人妻精品一区二区蜜桃| 亚洲动漫精品无码av天堂| 日韩精品一区在线| 亚洲国产精品成人午夜在线观看 | 国产成人精品久久综合| 日韩精品视频免费在线观看| 夜色www国产精品资源站| 无码精品蜜桃一区二区三区WW| 亚洲国产成人综合精品| 精品亚洲成A人无码成A在线观看 | jazzjazz国产精品| 亚洲精品成a人在线观看☆| 国产精品久久久久国产A级| 亚洲欧美日韩一区二区三区在线| 国产精品videossex另类| 麻豆精品久久久久久久99蜜桃 | 国内精品国语自产拍在线观看 | 日韩精品无码一区二区视频| 国产精品久久久久一区二区| 国产精品成人亚洲| 久久精品国产男包| 真实国产乱子伦精品免费| 999精品视频在线观看| 91精品国产高清久久久久久io| 国产观看精品一区二区三区| 亚洲精品无码成人片在线观看| 在线观看精品国产福利片87| 精品国产高清久久久久久小说| 亚洲一区二区三区国产精品无码| 久久精品成人国产午夜|