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

PHP的反射機(jī)制實例詳解

 更新時間:2017年03月29日 10:20:59   作者:真實的歸宿  
這篇文章主要介紹了PHP的反射機(jī)制,結(jié)合實例形式詳細(xì)分析了php反射機(jī)制的功能、原理、獲取屬性、注釋、方法相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了PHP的反射機(jī)制。分享給大家供大家參考,具體如下:

介紹:

PHP5添加了一項新的功能:Reflection。這個功能使得phper可以reverse-engineer class, interface,function,method and extension。通過PHP代碼,就可以得到某object的所有信息,并且可以和它交互。

反射是什么?

它是指在PHP運(yùn)行狀態(tài)中,擴(kuò)展分析PHP程序,導(dǎo)出或提取出關(guān)于類、方法、屬性、參數(shù)等的詳細(xì)信息,包括注釋。這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為反射API。反射是操縱面向?qū)ο蠓缎椭性P偷腁PI,其功能十分強(qiáng)大,可幫助我們構(gòu)建復(fù)雜,可擴(kuò)展的應(yīng)用。

其用途如:自動加載插件,自動生成文檔,甚至可用來擴(kuò)充PHP語言。

php反射api由若干類組成,可幫助我們用來訪問程序的元數(shù)據(jù)或者同相關(guān)的注釋交互。借助反射我們可以獲取諸如類實現(xiàn)了那些方法,創(chuàng)建一個類的實例(不同于用new創(chuàng)建),調(diào)用一個方法(也不同于常規(guī)調(diào)用),傳遞參數(shù),動態(tài)調(diào)用類的靜態(tài)方法。

反射api是php內(nèi)建的oop技術(shù)擴(kuò)展,包括一些類,異常和接口,綜合使用他們可用來幫助我們分析其它類,接口,方法,屬性,方法和擴(kuò)展。這些oop擴(kuò)展被稱為反射。

通過ReflectionClass,我們可以得到Person類的以下信息:

1)常量 Contants
2)屬性 Property Names
3)方法 Method Names靜態(tài)
4)屬性 Static Properties
5)命名空間 Namespace
6)Person類是否為final或者abstract

例子

class Person {
  /**
   * For the sake of demonstration, we"re setting this private
   */
  private $_allowDynamicAttributes = false;
  /** type=primary_autoincrement */
  protected $id = 0;
  /** type=varchar length=255 null */
  protected $name;
  /** type=text null */
  protected $biography;
    public function getId()
    {
      return $this->id;
    }
    public function setId($v)
    {
      $this->id = $v;
    }
    public function getName()
    {
      return $this->name;
    }
    public function setName($v)
    {
      $this->name = $v;
    }
    public function getBiography()
    {
      return $this->biography;
    }
    public function setBiography($v)
    {
      $this->biography = $v;
    }
}

接下來反射它,只要把類名"Person"傳遞給ReflectionClass就可以了:

$class = new ReflectionClass('Person');//建立 Person這個類的反射類
$instance = $class->newInstanceArgs($args);//相當(dāng)于實例化Person 類

1)獲取屬性(Properties):

$properties = $class->getProperties();
foreach($properties as $property) {
  echo $property->getName()."\n";
}
// 輸出:
// _allowDynamicAttributes
// id
// name
// biography

默認(rèn)情況下,ReflectionClass會獲取到所有的屬性,private 和 protected的也可以。如果只想獲取到private屬性,就要額外傳個參數(shù):

$private_properties = $class->getProperties(ReflectionProperty::IS_PRIVATE);

可用參數(shù)列表:

ReflectionProperty::IS_STATIC
ReflectionProperty::IS_PUBLIC
ReflectionProperty::IS_PROTECTED
ReflectionProperty::IS_PRIVATE

如果要同時獲取public 和private 屬性,就這樣寫:ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED。

通過$property->getName()可以得到屬性名。

2)獲取注釋:

通過getDocComment可以得到寫給property的注釋。

foreach($properties as $property) {
  if($property->isProtected()) {
    $docblock = $property->getDocComment();
    preg_match('/ type\=([a-z_]*) /', $property->getDocComment(), $matches);
    echo $matches[1]."\n";
  }
}
// Output:
// primary_autoincrement
// varchar
// text

3)獲取類的方法

獲取方法(methods):通過getMethods() 來獲取到類的所有methods。

4)執(zhí)行類的方法:

$instance->getBiography(); //執(zhí)行Person 里的方法getBiography
//或者:
$ec=$class->getmethod('getName'); //獲取Person 類中的getName方法
$ec->invoke($instance);    //執(zhí)行g(shù)etName 方法

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《PHP基本語法入門教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總

希望本文所述對大家PHP程序設(shè)計有所幫助。

相關(guān)文章

  • [PHP]實用函數(shù)4

    [PHP]實用函數(shù)4

    [PHP]實用函數(shù)4...
    2007-11-11
  • php獲取網(wǎng)頁上所有鏈接的方法

    php獲取網(wǎng)頁上所有鏈接的方法

    這篇文章主要介紹了php獲取網(wǎng)頁上所有鏈接的方法,涉及php操作正則匹配的技巧,代碼簡單實用,需要的朋友可以參考下
    2015-04-04
  • 用C/C++擴(kuò)展你的PHP 為你的php增加功能

    用C/C++擴(kuò)展你的PHP 為你的php增加功能

    PHP取得成功的一個主要原因之一是她擁有大量的可用擴(kuò)展。web開發(fā)者無論有何種需求,這種需求最有可能在PHP發(fā)行包里找到。PHP發(fā)行包包括支持各種數(shù)據(jù)庫,圖形文件格式,壓縮,XML技術(shù)擴(kuò)展在內(nèi)的許多擴(kuò)展
    2012-09-09
  • PHP接收App端發(fā)送文件流的方法

    PHP接收App端發(fā)送文件流的方法

    這篇文章主要介紹了PHP接收App端發(fā)送文件流的方法,涉及php基于curl的文件傳輸操作相關(guān)技巧,需要的朋友可以參考下
    2016-09-09
  • PHP+MySQL實現(xiàn)的簡單投票系統(tǒng)實例

    PHP+MySQL實現(xiàn)的簡單投票系統(tǒng)實例

    這篇文章主要介紹了PHP+MySQL實現(xiàn)的簡單投票系統(tǒng),以完整實例形式分析了PHP+MySQL實現(xiàn)投票功能的具體功能代碼與相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • php對字符串中的特殊符號進(jìn)行過濾的方法

    php對字符串中的特殊符號進(jìn)行過濾的方法

    有時候我們會遇到過濾字符串中特殊字符的問題,本文提供了三個處理特殊字符串的方法,文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • PHP 數(shù)據(jù)庫 常見問題小結(jié)

    PHP 數(shù)據(jù)庫 常見問題小結(jié)

    揭露 PHP 應(yīng)用程序中出現(xiàn)的五個常見數(shù)據(jù)庫問題 —— 包括數(shù)據(jù)庫模式設(shè)計、數(shù)據(jù)庫訪問和使用數(shù)據(jù)庫的業(yè)務(wù)邏輯代碼 —— 以及它們的解決方案。
    2009-06-06
  • php實現(xiàn)統(tǒng)計二進(jìn)制中1的個數(shù)算法示例

    php實現(xiàn)統(tǒng)計二進(jìn)制中1的個數(shù)算法示例

    這篇文章主要介紹了php實現(xiàn)統(tǒng)計二進(jìn)制中1的個數(shù)算法,結(jié)合實例形式分析了php字符串遍歷、判斷、統(tǒng)計等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • php 使用post,get的一種簡潔方式

    php 使用post,get的一種簡潔方式

    使用$_POST,和$_GET獲取客戶發(fā)來的信息時,一般是使用數(shù)組加小標(biāo)的方式。
    2010-04-04
  • PHP中上傳多個文件的表單設(shè)計例子

    PHP中上傳多個文件的表單設(shè)計例子

    這篇文章主要介紹了PHP中上傳多個文件的表單設(shè)計例子,本文著重講解的是表單如何設(shè)計,后端處理需要循環(huán)$_FILES數(shù)組來實現(xiàn),需要的朋友可以參考下
    2014-11-11

最新評論

稻城县| 东阳市| 同心县| 曲阳县| 新乡市| 澄迈县| 宁蒗| 北辰区| 宜黄县| 绥宁县| 北海市| 革吉县| 巫山县| 彭州市| 宜春市| 淮滨县| 兴国县| 邳州市| 讷河市| 海兴县| 高陵县| 信宜市| 呼玛县| 保亭| 天水市| 佛坪县| 隆回县| 襄垣县| 万盛区| 安泽县| 云安县| 新建县| 长治县| 澄迈县| 武乡县| 屯昌县| 南投市| 罗江县| 大同县| 商丘市| 通渭县|