PHP Reflection API詳解_php技巧

來源:互聯網
上載者:User

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類

<?phpclass Reflection{  public static mixed export(Reflector r [,bool return])  //匯出一個類或方法的詳細資料  public static array getModifierNames(int modifiers)  //取得修飾符的名字}?>

②ReflectionException類

該類繼承標準類,沒特殊方法和屬性。

③ReflectionFunction類

<?phpclass 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類:

<?phpclass 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類:

<?phpclass 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類:

<?phpclass 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類:

<?phpclass 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類

<?phpclass 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()}?> 

使用例子:

<?phpclass Person{ private $_name;  public $age;  public function __construct(){ $this->sex = "male"; }  public function action(){ echo "來自http://www.jb51.net的測試"; }} $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確實能夠擷取很多有用的資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.