程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP反射API

PHP反射API

編輯:關於PHP編程

反射的理解
它是指在php的運行狀態中,擴展分析php程序,導出或者提取出關於類、方法、屬性、參數等詳細信息,甚至包括注釋。這種動態獲取的信息以及動態調用對象的方法的功能稱為反射API。反射是操縱面向對象模型中元模型的API,其功能十分強大,可以幫助我們構建復雜,可擴展的應用。(ps:包括在工廠模式中的使用)
反射API是php內建的oop技術擴展,包括一些類、異常和接口,綜合使用他們可用來幫助我們分析其它類,接口,方法,屬性和擴展。這些oop擴展被稱為反射。
ReflectionClass
[php] 
<?php 
class ReflectionClass implements Reflector 

    final private __clone() 
    public object __construct(string name) 
    public string __toString() 
    public static string export() 
    //導出該類的詳細信息 
    public string getName() 
    //取得類名或接口名 
    public bool isInternal() 
    //測試該類是否為系統內部類 
    public bool isUserDefined() 
    //測試該類是否為用戶自定義類 
    public bool isInstantiable() 
    //測試該類是否被實例化過 
    public bool hasConstant(string name) 
    //測試該類是否有特定的常量 
    public bool hasMethod(string name) 
    //測試該類是否有特定的方法 
    public bool hasProperty(string name) 
    //測試該類是否有特定的屬性 
    public string getFileName() 
    //取得定義該類的文件名,包括路徑名 
    public int getStartLine() 
    //取得定義該類的開始行 
    public int getEndLine() 
    //取得定義該類的結束行 
    public string getDocComment() 
    //取得該類的注釋 
    public ReflectionMethod getConstructor() 
    //取得該類的構造函數信息 
    public ReflectionMethod getMethod(string name) 
    //取得該類的某個特定的方法信息 
    public ReflectionMethod[] getMethods() 
    //取得該類的所有的方法信息 
    public ReflectionProperty getProperty(string name) 
    //取得某個特定的屬性信息 
    public ReflectionProperty[] getProperties() 
    //取得該類的所有屬性信息 
    public array getConstants() 
    //取得該類所有常量信息 
    public mixed getConstant(string name) 
    //取得該類特定常量信息 
    public ReflectionClass[] getInterfaces() 
    //取得接口類信息 
    public bool isInterface() 
    //測試該類是否為接口 
    public bool isAbstract() 
    //測試該類是否為抽象類 
    public bool isFinal() 
    //測試該類是否聲明為final 
    public int getModifiers() 
    //取得該類的修飾符,返回值類型可能是個資源類型 
    //通過Reflection::getModifierNames($class->getModifiers())進一步讀取 
    public bool isInstance(stdclass object) 
    //測試傳入的對象是否為該類的一個實例 
    public stdclass newInstance(mixed* args) 
    //創建該類實例 
    public ReflectionClass getParentClass() 
    //取得父類 
    public bool isSubclassOf(ReflectionClass class) 
    //測試傳入的類是否為該類的父類 
    public array getStaticProperties() 
    //取得該類的所有靜態屬性 
    public mixed getStaticPropertyValue(string name [, mixed default]) 
    //取得該類的靜態屬性值,若private,則不可訪問 
    public void setStaticPropertyValue(string name, mixed value) 
    //設置該類的靜態屬性值,若private,則不可訪問,有悖封裝原則 
    public array getDefaultProperties() 
    //取得該類的屬性信息,不含靜態屬性 
    public bool isIterateable() 
    public bool implementsInterface(string name) 
    //測試是否實現了某個特定接口 
    public ReflectionExtension getExtension() 
    public string getExtensionName() 

?> 
工廠模式應用:
[php] 
class MoveDataFactory 

    /**
     * Description:簡單工廠模式,根據mode選取不同實例化對象
     * @return 對象實例
     */ 
    public function GetMoveClass($classname) 
    { 
        $reflectionclass = new ReflectionClass($classname); 
        return $reflectionclass->newInstance(); 
    } 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved