PHP Reflection API詳解
PHP Reflection API是PHP5才有的新功能,它是用來導出或提取出關(guān)于類、方法、屬性、參數(shù)等的詳細信息,包括注釋。
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() //導出該函數(shù)的詳細信息 public string getName() //取得函數(shù)名 public bool isInternal() //測試是否為系統(tǒng)內(nèi)部函數(shù) public bool isUserDefined() //測試是否為用戶自定義函數(shù) public string getFileName() //取得文件名,包括路徑名 public int getStartLine() //取得定義函數(shù)的起始行 public int getEndLine() //取得定義函數(shù)的結(jié)束行 public string getDocComment() //取得函數(shù)的注釋 public array getStaticVariables() //取得靜態(tài)變量 public mixed invoke(mixed* args) //調(diào)用該函數(shù),通過參數(shù)列表傳參數(shù) public mixed invokeArgs(array args) //調(diào)用該函數(shù),通過數(shù)組傳參數(shù) public bool returnsReference() //測試該函數(shù)是否返回引用 public ReflectionParameter[] getParameters() //取得該方法所需的參數(shù),返回值為對象數(shù)組 public int getNumberOfParameters() //取得該方法所需的參數(shù)個數(shù) public int getNumberOfRequiredParameters() //取得該方法所需的參數(shù)個數(shù) } ?>
④ReflectionParameter類:
<?php class ReflectionParameter implements Reflector { final private __clone() public object __construct(string name) public string __toString() public static string export() //導出該參數(shù)的詳細信息 public string getName() //取得參數(shù)名 public bool isPassedByReference() //測試該參數(shù)是否通過引用傳遞參數(shù) public ReflectionClass getClass() //若該參數(shù)為對象,返回該對象的類名 public bool isArray() //測試該參數(shù)是否為數(shù)組類型 public bool allowsNull() //測試該參數(shù)是否允許為空 public bool isOptional() //測試該參數(shù)是否為可選的,當有默認參數(shù)時可選 public bool isDefaultValueAvailable() //測試該參數(shù)是否為默認參數(shù) public mixed getDefaultValue() //取得該參數(shù)的默認值 } ?>
⑤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() //測試該類是否為系統(tǒng)內(nèi)部類 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() //取得定義該類的結(jié)束行 public string getDocComment() //取得該類的注釋 public ReflectionMethod getConstructor() //取得該類的構(gòu)造函數(shù)信息 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) //創(chuàng)建該類實例 public ReflectionClass getParentClass() //取得父類 public bool isSubclassOf(ReflectionClass class) //測試傳入的類是否為該類的父類 public array getStaticProperties() //取得該類的所有靜態(tài)屬性 public mixed getStaticPropertyValue(string name [, mixed default]) //取得該類的靜態(tài)屬性值,若private,則不可訪問 public void setStaticPropertyValue(string name, mixed value) //設置該類的靜態(tài)屬性值,若private,則不可訪問,有悖封裝原則 public array getDefaultProperties() //取得該類的屬性信息,不含靜態(tài)屬性 public bool isIterateable() public bool implementsInterface(string name) //測試是否實現(xiàn)了某個特定接口 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) //調(diào)用該方法 public mixed invokeArgs(stdclass object, array args) //調(diào)用該方法,傳多參數(shù) 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() //測試該方法是否為構(gòu)造函數(shù) public bool isDestructor() //測試該方法是否為析構(gòu)函數(shù) 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() //取得該擴展的所有函數(shù) public array getConstants() //取得該擴展的所有常量 public array getINIEntries() //取得與該擴展相關(guān)的,在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.dbjr.com.cn的測試"; } } $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確實能夠獲取很多有用的信息。
相關(guān)文章
php函數(shù)之strtr和str_replace的用法詳解以及效率分析
PHP中主要用strtr()和str_repalce()這兩個函數(shù)替換字符串和數(shù)組,但你們都知道他們這兩個函數(shù)的區(qū)別和用法嗎?有不少文章在說使用strtr函數(shù)比str_replace快4倍,那為什么很多時候都在用str_replace,到底應該使用哪個函數(shù)呢2022-11-11PHP中遇到BOM、<feff>編碼導致json_decode函數(shù)無法解析問題
這篇文章主要介紹了PHP中遇到BOM、<feff>編碼導致json_decode函數(shù)無法解析問題,json無法正常解析的同學可以看一下,是不是看不見的BOM編碼導致的問題,需要的朋友可以參考下2014-07-07PHP實現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法
這篇文章主要介紹了PHP實現(xiàn)將瀏覽歷史頁面網(wǎng)址保存到cookie的方法,涉及php對cookie的讀取、字符串轉(zhuǎn)化及保存等技巧,需要的朋友可以參考下2015-01-01php中header設置常見文件類型的content-type
這篇文章主要介紹了php中header設置常見文件類型的content-type的相關(guān)資料,需要的朋友可以參考下2015-06-06