日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

PHP反射API

發(fā)布時(shí)間:2025/7/14 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP反射API 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

1.用途:

?
該擴(kuò)展分析php程序,導(dǎo)出或提取出關(guān)于類、方法、屬性、參數(shù)等的詳細(xì)信息,包括注釋。
Reflection可以說(shuō)是對(duì)php庫(kù)函數(shù):“Classes/Objects 類/對(duì)象函數(shù)”的一個(gè)擴(kuò)展。
主要用在通過(guò)程序檢測(cè)現(xiàn)有php程序內(nèi)部關(guān)于類、方法等信息,并做出處理。

2.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 { }

3.詳細(xì)說(shuō)明:(例子詳見(jiàn)php手冊(cè))

?
①Reflection類
<?php
class Reflection
{
??? public static mixed export(Reflector r [,bool return])
??? //導(dǎo)出一個(gè)類或方法的詳細(xì)信息
??? public static array getModifierNames(int modifiers)
??? //取得修飾符的名字
}
?>

②ReflectionException類

該類繼承標(biāo)準(zhǔn)類,沒(méi)特殊方法和屬性。

③ReflectionFunction類
<?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類:
<?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ì)象的類名
??? public bool isArray()
??? //測(cè)試該參數(shù)是否為數(shù)組類型
??? 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類:
<?php
class ReflectionClass implements Reflector
{
??? final private __clone()
??? public object __construct(string name)
??? public string __toString()
??? public static string export()
??? //導(dǎo)出該類的詳細(xì)信息
??? public string getName()
??? //取得類名或接口名
??? public bool isInternal()
??? //測(cè)試該類是否為系統(tǒng)內(nèi)部類
??? public bool isUserDefined()
??? //測(cè)試該類是否為用戶自定義類
??? public bool isInstantiable()
??? //測(cè)試該類是否被實(shí)例化過(guò)
??? public bool hasConstant(string name)
??? //測(cè)試該類是否有特定的常量
??? public bool hasMethod(string name)
??? //測(cè)試該類是否有特定的方法
??? public bool hasProperty(string name)
??? //測(cè)試該類是否有特定的屬性
??? public string getFileName()
??? //取得定義該類的文件名,包括路徑名
??? public int getStartLine()
??? //取得定義該類的開始行
??? public int getEndLine()
??? //取得定義該類的結(jié)束行
??? public string getDocComment()
??? //取得該類的注釋
??? public ReflectionMethod getConstructor()
??? //取得該類的構(gòu)造函數(shù)信息
??? public ReflectionMethod getMethod(string name)
??? //取得該類的某個(gè)特定的方法信息
??? public ReflectionMethod[] getMethods()
??? //取得該類的所有的方法信息
??? public ReflectionProperty getProperty(string name)
??? //取得某個(gè)特定的屬性信息
??? public ReflectionProperty[] getProperties()
??? //取得該類的所有屬性信息
??? public array getConstants()
??? //取得該類所有常量信息
??? public mixed getConstant(string name)
??? //取得該類特定常量信息
??? public ReflectionClass[] getInterfaces()
??? //取得接口類信息
??? public bool isInterface()
??? //測(cè)試該類是否為接口
??? public bool isAbstract()
??? //測(cè)試該類是否為抽象類
??? public bool isFinal()
??? //測(cè)試該類是否聲明為final
??? public int getModifiers()
??? //取得該類的修飾符,返回值類型可能是個(gè)資源類型
??? //通過(guò)Reflection::getModifierNames($class->getModifiers())進(jìn)一步讀取
??? public bool isInstance(stdclass object)
??? //測(cè)試傳入的對(duì)象是否為該類的一個(gè)實(shí)例
??? public stdclass newInstance(mixed* args)
??? //創(chuàng)建該類實(shí)例
??? public ReflectionClass getParentClass()
??? //取得父類
??? public bool isSubclassOf(ReflectionClass class)
??? //測(cè)試傳入的類是否為該類的父類
??? public array getStaticProperties()
??? //取得該類的所有靜態(tài)屬性
??? public mixed getStaticPropertyValue(string name [, mixed default])
??? //取得該類的靜態(tài)屬性值,若private,則不可訪問(wèn)
??? public void setStaticPropertyValue(string name, mixed value)
??? //設(shè)置該類的靜態(tài)屬性值,若private,則不可訪問(wèn),有悖封裝原則
??? public array getDefaultProperties()
??? //取得該類的屬性信息,不含靜態(tài)屬性
??? public bool isIterateable()
??? public bool implementsInterface(string name)
??? //測(cè)試是否實(shí)現(xiàn)了某個(gè)特定接口
??? 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()
??? //導(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()
??? //取得該方法所屬的類
??? // 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()
??? //導(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()
??? //取得定義該屬性的類
??? public string getDocComment()
??? //取得該屬性的注釋
}
?>

⑧ReflectionExtension類
<?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()
}
?>

4.附:

一方面Reflector接口為Reflection小系統(tǒng)提供了一個(gè)很好的接口命名規(guī)范,
每個(gè)實(shí)現(xiàn)他的類都須按他的規(guī)范,從外部看來(lái),這個(gè)小系統(tǒng)API很統(tǒng)一。
另一方面由于很多類實(shí)現(xiàn)了Reflector接口,
在這樣的類層次結(jié)構(gòu)中,若想實(shí)現(xiàn)多態(tài)是很容易的。

轉(zhuǎn)載于:https://my.oschina.net/mingtingling/blog/118590

總結(jié)

以上是生活随笔為你收集整理的PHP反射API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。