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

        手寫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无码久久综合影院| 亚洲精品无码Av人在线观看国产 | 精品久久久久久国产三级| 国产成人精品视频播放| 亚洲国产精品一区第二页 | 日韩经典精品无码一区| 日本一区精品久久久久影院| 久久99国产综合精品免费| 伊人久久大香线蕉精品不卡| 国产综合精品久久亚洲 | 欧美亚洲另类精品第一页 | 在线精品视频一区二区| 国内精品久久久久久久涩爱| 欧美一区二区精品久久| 国产日产韩国精品视频| 久久精品中文闷骚内射| 亚洲国产精品一区二区成人片国内 | 日韩精品一区二区三区中文字幕| 色妞ww精品视频7777| 亚洲精品综合久久| 精品无码人妻一区二区三区不卡| 老司机67194精品线观看| 亚洲日韩国产精品乱| 久久精品中文字幕有码| 精品国产一级在线观看 | 国自产偷精品不卡在线| 蜜芽亚洲av无码精品色午夜| 亚洲精品无码久久千人斩| 亚洲中文精品久久久久久不卡 | 国产精品美脚玉足脚交欧美| 亚洲伊人久久精品影院| 欧美精品888| 精品国精品无码自拍自在线| 精品国产一区二区三区不卡| 无码人妻精品一区二区三区久久久 |