程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> PHP反射機制詳解以及插件的架構實現

PHP反射機制詳解以及插件的架構實現

編輯:PHP基礎知識
 

1。用途:
該擴展分析php程序,導出或提取出關於類、方法、屬性、參數等的詳細信息,包括注釋。
Reflection可以說是對php庫函數:“Classes/Objects 類/對象函數”的一個擴展。
主要用在通過程序檢測現有php程序內部關於類、方法等信息,並做出處理。
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。詳細說明:(例子詳見php手冊)
①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類

 

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