這篇文章主要介紹了PHP Reflection API詳解,本文講解了Reflection類、ReflectionException類、ReflectionFunction類、ReflectionParameter類、ReflectionClass類、ReflectionMethod類等內容,需要的朋友可以參考下
PHP Reflection API是PHP5才有的新功能,它是用來導出或提取出關于類、方法、屬性、參數等的詳細信息,包括注釋。
PHP Reflection API有:
- class Reflection { }
- interface Reflector { }
- class ReflectionException extends Exception { }
- class ReflectionFunction implements Reflector { }
- class ReflectionParameter implements Reflector { }
- class ReflectionMethod extends ReflectionFunction { }
- class ReflectionClass implements Reflector { }
- class ReflectionObject extends ReflectionClass { }
- class ReflectionProperty implements Reflector { }
- class ReflectionExtension implements Reflector { }
具體API說明:
①Reflection類
- <?php
- class Reflection
- {
- public static mixed export(Reflector r [,bool return])
- //導出一個類或方法的詳細信息
- public static array getModifierNames(int modifiers)
- //取得修飾符的名字
- }
- ?>
②ReflectionException類
該類繼承標準類,沒特殊方法和屬性。
③ReflectionFunction類
- <?php
- class ReflectionFunction 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 string getFileName()
- //取得文件名,包括路徑名
- public int getStartLine()
- //取得定義函數的起始行
- public int getEndLine()
- //取得定義函數的結束行
- public string getDocComment()
- //取得函數的注釋
- public array getStaticVariables()
- //取得靜態變量
- public mixed invoke(mixed* args)
- //調用該函數,通過參數列表傳參數
- public mixed invokeArgs(array args)
- //調用該函數,通過數組傳參數
- public bool returnsReference()
- //測試該函數是否返回引用
- public ReflectionParameter[] getParameters()
- //取得該方法所需的參數,返回值為對象數組
- public int getNumberOfParameters()
- //取得該方法所需的參數個數
- public int getNumberOfRequiredParameters()
- //取得該方法所需的參數個數
- }
- ?>
④ReflectionParameter類:
- <?php
- class ReflectionParameter implements Reflector
- {
- final private __clone()
- public object __construct(string name)
- public string __toString()
- public static string export()
- //導出該參數的詳細信息
- public string getName()
- //取得參數名
- public bool isPassedByReference()
- //測試該參數是否通過引用傳遞參數
- public ReflectionClass getClass()
- //若該參數為對象,返回該對象的類名
- public bool isArray()
- //測試該參數是否為數組類型
- public bool allowsNull()
- //測試該參數是否允許為空
- public bool isOptional()
- //測試該參數是否為可選的,當有默認參數時可選
- public bool isDefaultValueAvailable()
- //測試該參數是否為默認參數
- public mixed getDefaultValue()
- //取得該參數的默認值
- }
- ?>
⑤ReflectionClass類:
- <?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()
- }
- ?>
⑥ReflectionMethod類:
- <?php
- class ReflectionMethod extends ReflectionFunction
- {
- public __construct(mixed class, string name)
- public string __toString()
- public static string export()
- //導出該方法的信息
- public mixed invoke(stdclass object, mixed* args)
- //調用該方法
- public mixed invokeArgs(stdclass object, array args)
- //調用該方法,傳多參數
- public bool isFinal()
- //測試該方法是否為final
- public bool isAbstract()
- //測試該方法是否為abstract
- public bool isPublic()
- //測試該方法是否為public
- public bool isPrivate()
- //測試該方法是否為private
- public bool isProtected()
- //測試該方法是否為protected
- public bool isStatic()
- //測試該方法是否為static
- public bool isConstructor()
- //測試該方法是否為構造函數
- public bool isDestructor()
- //測試該方法是否為析構函數
- public int getModifiers()
- //取得該方法的修飾符
- public ReflectionClass getDeclaringClass()
- //取得該方法所屬的類
- // Inherited from ReflectionFunction
- final private __clone()
- public string getName()
- public bool isInternal()
- public bool isUserDefined()
- public string getFileName()
- public int getStartLine()
- public int getEndLine()
- public string getDocComment()
- public array getStaticVariables()
- public bool returnsReference()
- public ReflectionParameter[] getParameters()
- public int getNumberOfParameters()
- public int getNumberOfRequiredParameters()
- }
- ?>
⑦ReflectionProperty類:
- <?php
- class ReflectionProperty implements Reflector
- {
- final private __clone()
- public __construct(mixed class, string name)
- public string __toString()
- public static string export()
- //導出該屬性的詳細信息
- public string getName()
- //取得該屬性名
- public bool isPublic()
- //測試該屬性名是否為public
- public bool isPrivate()
- //測試該屬性名是否為private
- public bool isProtected()
- //測試該屬性名是否為protected
- public bool isStatic()
- //測試該屬性名是否為static
- public bool isDefault()
- public int getModifiers()
- //取得修飾符
- public mixed getValue(stdclass object)
- //取得該屬性值
- public void setValue(stdclass object, mixed value)
- //設置該屬性值
- public ReflectionClass getDeclaringClass()
- //取得定義該屬性的類
- public string getDocComment()
- //取得該屬性的注釋
- }
- ?>
⑧ReflectionExtension類
- <?php
- class ReflectionExtension implements Reflector {
- final private __clone()
- public __construct(string name)
- public string __toString()
- public static string export()
- //導出該擴展的所有信息
- public string getName()
- //取得該擴展的名字
- public string getVersion()
- //取得該擴展的版本
- public ReflectionFunction[] getFunctions()
- //取得該擴展的所有函數
- public array getConstants()
- //取得該擴展的所有常量
- public array getINIEntries()
- //取得與該擴展相關的,在php.ini中的指令信息
- public ReflectionClass[] getClasses()
- public array getClassNames()
- }
- ?>
使用例子:
- <?php
- class Person{
- private $_name;
- public $age;
- public function __construct(){
- $this->sex = "male";
- }
- public function action(){
- echo "來自http://www.49028c.com的測試";
- }
- }
- $class = new ReflectionClass('Person');
- //獲取屬性
- foreach($class->getProperties() as $property) {
- echo $property->getName()."/n";
- }
- //獲取方法
- print_r($class->getMethods());
- $p1 = new Person();
- $obj = new ReflectionObject($p1);
- //獲取對象和類的屬性
- print_r($obj->getProperties());
很明顯上面代碼中對象和類獲取的屬性是不同的,這是因為對象進行了contruct實例化,因此多了sex屬性,PHP Reflection確實能夠獲取很多有用的信息。
新聞熱點
疑難解答