PHP Reflection API詳解
PHP Reflection API是PHP5才有的新功能,它是用來(lái)導(dǎo)出或提取出關(guān)于類(lèi)、方法、屬性、參數(shù)等的詳細(xì)信息,包括注釋。
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說(shuō)明:
①Reflection類(lèi)
<?php
class Reflection
{
public static mixed export(Reflector r [,bool return])
//導(dǎo)出一個(gè)類(lèi)或方法的詳細(xì)信息
public static array getModifierNames(int modifiers)
//取得修飾符的名字
}
?>
②ReflectionException類(lèi)
該類(lèi)繼承標(biāo)準(zhǔn)類(lèi),沒(méi)特殊方法和屬性。
③ReflectionFunction類(lèi)
<?php
class ReflectionFunction implements Reflector
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
//導(dǎo)出該函數(shù)的詳細(xì)信息
public string getName()
//取得函數(shù)名
public bool isInternal()
//測(cè)試是否為系統(tǒng)內(nèi)部函數(shù)
public bool isUserDefined()
//測(cè)試是否為用戶自定義函數(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ù),通過(guò)參數(shù)列表傳參數(shù)
public mixed invokeArgs(array args)
//調(diào)用該函數(shù),通過(guò)數(shù)組傳參數(shù)
public bool returnsReference()
//測(cè)試該函數(shù)是否返回引用
public ReflectionParameter[] getParameters()
//取得該方法所需的參數(shù),返回值為對(duì)象數(shù)組
public int getNumberOfParameters()
//取得該方法所需的參數(shù)個(gè)數(shù)
public int getNumberOfRequiredParameters()
//取得該方法所需的參數(shù)個(gè)數(shù)
}
?>
④ReflectionParameter類(lèi):
<?php
class ReflectionParameter implements Reflector
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
//導(dǎo)出該參數(shù)的詳細(xì)信息
public string getName()
//取得參數(shù)名
public bool isPassedByReference()
//測(cè)試該參數(shù)是否通過(guò)引用傳遞參數(shù)
public ReflectionClass getClass()
//若該參數(shù)為對(duì)象,返回該對(duì)象的類(lèi)名
public bool isArray()
//測(cè)試該參數(shù)是否為數(shù)組類(lèi)型
public bool allowsNull()
//測(cè)試該參數(shù)是否允許為空
public bool isOptional()
//測(cè)試該參數(shù)是否為可選的,當(dāng)有默認(rèn)參數(shù)時(shí)可選
public bool isDefaultValueAvailable()
//測(cè)試該參數(shù)是否為默認(rèn)參數(shù)
public mixed getDefaultValue()
//取得該參數(shù)的默認(rèn)值
}
?>
⑤ReflectionClass類(lèi):
<?php
class ReflectionClass implements Reflector
{
final private __clone()
public object __construct(string name)
public string __toString()
public static string export()
//導(dǎo)出該類(lèi)的詳細(xì)信息
public string getName()
//取得類(lèi)名或接口名
public bool isInternal()
//測(cè)試該類(lèi)是否為系統(tǒng)內(nèi)部類(lèi)
public bool isUserDefined()
//測(cè)試該類(lèi)是否為用戶自定義類(lèi)
public bool isInstantiable()
//測(cè)試該類(lèi)是否被實(shí)例化過(guò)
public bool hasConstant(string name)
//測(cè)試該類(lèi)是否有特定的常量
public bool hasMethod(string name)
//測(cè)試該類(lèi)是否有特定的方法
public bool hasProperty(string name)
//測(cè)試該類(lèi)是否有特定的屬性
public string getFileName()
//取得定義該類(lèi)的文件名,包括路徑名
public int getStartLine()
//取得定義該類(lèi)的開(kāi)始行
public int getEndLine()
//取得定義該類(lèi)的結(jié)束行
public string getDocComment()
//取得該類(lèi)的注釋
public ReflectionMethod getConstructor()
//取得該類(lèi)的構(gòu)造函數(shù)信息
public ReflectionMethod getMethod(string name)
//取得該類(lèi)的某個(gè)特定的方法信息
public ReflectionMethod[] getMethods()
//取得該類(lèi)的所有的方法信息
public ReflectionProperty getProperty(string name)
//取得某個(gè)特定的屬性信息
public ReflectionProperty[] getProperties()
//取得該類(lèi)的所有屬性信息
public array getConstants()
//取得該類(lèi)所有常量信息
public mixed getConstant(string name)
//取得該類(lèi)特定常量信息
public ReflectionClass[] getInterfaces()
//取得接口類(lèi)信息
public bool isInterface()
//測(cè)試該類(lèi)是否為接口
public bool isAbstract()
//測(cè)試該類(lèi)是否為抽象類(lèi)
public bool isFinal()
//測(cè)試該類(lèi)是否聲明為final
public int getModifiers()
//取得該類(lèi)的修飾符,返回值類(lèi)型可能是個(gè)資源類(lèi)型
//通過(guò)Reflection::getModifierNames($class->getModifiers())進(jìn)一步讀取
public bool isInstance(stdclass object)
//測(cè)試傳入的對(duì)象是否為該類(lèi)的一個(gè)實(shí)例
public stdclass newInstance(mixed* args)
//創(chuàng)建該類(lèi)實(shí)例
public ReflectionClass getParentClass()
//取得父類(lèi)
public bool isSubclassOf(ReflectionClass class)
//測(cè)試傳入的類(lèi)是否為該類(lèi)的父類(lèi)
public array getStaticProperties()
//取得該類(lèi)的所有靜態(tài)屬性
public mixed getStaticPropertyValue(string name [, mixed default])
//取得該類(lèi)的靜態(tài)屬性值,若private,則不可訪問(wèn)
public void setStaticPropertyValue(string name, mixed value)
//設(shè)置該類(lèi)的靜態(tài)屬性值,若private,則不可訪問(wèn),有悖封裝原則
public array getDefaultProperties()
//取得該類(lèi)的屬性信息,不含靜態(tài)屬性
public bool isIterateable()
public bool implementsInterface(string name)
//測(cè)試是否實(shí)現(xiàn)了某個(gè)特定接口
public ReflectionExtension getExtension()
public string getExtensionName()
}
?>
⑥ReflectionMethod類(lèi):
<?php
class ReflectionMethod extends ReflectionFunction
{
public __construct(mixed class, string name)
public string __toString()
public static string export()
//導(dǎo)出該方法的信息
public mixed invoke(stdclass object, mixed* args)
//調(diào)用該方法
public mixed invokeArgs(stdclass object, array args)
//調(diào)用該方法,傳多參數(shù)
public bool isFinal()
//測(cè)試該方法是否為final
public bool isAbstract()
//測(cè)試該方法是否為abstract
public bool isPublic()
//測(cè)試該方法是否為public
public bool isPrivate()
//測(cè)試該方法是否為private
public bool isProtected()
//測(cè)試該方法是否為protected
public bool isStatic()
//測(cè)試該方法是否為static
public bool isConstructor()
//測(cè)試該方法是否為構(gòu)造函數(shù)
public bool isDestructor()
//測(cè)試該方法是否為析構(gòu)函數(shù)
public int getModifiers()
//取得該方法的修飾符
public ReflectionClass getDeclaringClass()
//取得該方法所屬的類(lèi)
// 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類(lèi):
<?php
class ReflectionProperty implements Reflector
{
final private __clone()
public __construct(mixed class, string name)
public string __toString()
public static string export()
//導(dǎo)出該屬性的詳細(xì)信息
public string getName()
//取得該屬性名
public bool isPublic()
//測(cè)試該屬性名是否為public
public bool isPrivate()
//測(cè)試該屬性名是否為private
public bool isProtected()
//測(cè)試該屬性名是否為protected
public bool isStatic()
//測(cè)試該屬性名是否為static
public bool isDefault()
public int getModifiers()
//取得修飾符
public mixed getValue(stdclass object)
//取得該屬性值
public void setValue(stdclass object, mixed value)
//設(shè)置該屬性值
public ReflectionClass getDeclaringClass()
//取得定義該屬性的類(lèi)
public string getDocComment()
//取得該屬性的注釋
}
?>
⑧ReflectionExtension類(lèi)
<?php
class ReflectionExtension implements Reflector {
final private __clone()
public __construct(string name)
public string __toString()
public static string export()
//導(dǎo)出該擴(kuò)展的所有信息
public string getName()
//取得該擴(kuò)展的名字
public string getVersion()
//取得該擴(kuò)展的版本
public ReflectionFunction[] getFunctions()
//取得該擴(kuò)展的所有函數(shù)
public array getConstants()
//取得該擴(kuò)展的所有常量
public array getINIEntries()
//取得與該擴(kuò)展相關(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 "來(lái)自http://www.dhdzp.com的測(cè)試";
}
}
$class = new ReflectionClass('Person');
//獲取屬性
foreach($class->getProperties() as $property) {
echo $property->getName()."\n";
}
//獲取方法
print_r($class->getMethods());
$p1 = new Person();
$obj = new ReflectionObject($p1);
//獲取對(duì)象和類(lèi)的屬性
print_r($obj->getProperties());
很明顯上面代碼中對(duì)象和類(lèi)獲取的屬性是不同的,這是因?yàn)閷?duì)象進(jìn)行了contruct實(shí)例化,因此多了sex屬性,PHP Reflection確實(shí)能夠獲取很多有用的信息。
相關(guān)文章
php使用sql server驗(yàn)證連接數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了php使用sql server驗(yàn)證連接數(shù)據(jù)庫(kù)的方法,以實(shí)例形式分析了php采用基于SQL Server驗(yàn)證進(jìn)行數(shù)據(jù)庫(kù)連接的原理及技巧,并總結(jié)了相關(guān)注意事項(xiàng),需要的朋友可以參考下2014-12-12
PHP封裝的Twitter訪問(wèn)類(lèi)實(shí)例
這篇文章主要介紹了PHP封裝的Twitter訪問(wèn)類(lèi),通過(guò)curl調(diào)用實(shí)現(xiàn)針對(duì)Twitter的常用訪問(wèn)功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
PHP中使用foreach()遍歷二維數(shù)組的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇PHP中使用foreach()遍歷二維數(shù)組的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
PHPStorm+XDebug進(jìn)行調(diào)試圖文教程
這篇文章主要為大家詳細(xì)介紹了PHPStorm+XDebug進(jìn)行調(diào)試圖文教程,內(nèi)容很豐富,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
phpMyadmin 用戶權(quán)限中英對(duì)照
在登陸phpmyadmin時(shí)選擇了“中文 – Chinese Simplified“,那么就有中文的管理界面了,雖然在phpmyadmin中顯示的用戶權(quán)限顯示的還是英文的,但是鼠標(biāo)放上去時(shí),有中文的提示,這里把phpmyadmin v3.2.4中英文對(duì)照表附上2010-04-04
如何在Ubuntu下啟動(dòng)Apache的Rewrite功能
本篇文章是對(duì)在Ubuntu下啟動(dòng)Apache的Rewrite功能的具體操作步驟進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07

