php反射機制應用

2022-02-12 14:23:15 字數 2654 閱讀 3396

用來獲取指定的類的資訊,包括類中的屬性,方法,方法許可權,注釋等

用途:1.thinkphp框架中的前置,後置控制器的實現

2.與debug_backtrace函式結合使用,檔案呼叫的許可權管理

使用方法:

1

<?php

2class

person

2728

public

function setid($v

) 31

32public

function

getname()

3536

public

function setname($v

) 39

40public

function

getbiography()

4344

public

function setbiography($v

) 47 }

一、通過reflectionclass,我們可以得到person類的以下資訊:

常量 contants

屬性 property names

方法 method names靜態

屬性 static properties

命名空間 namespace

person類是否為final或者abstract

person類是否有某個方法

接下來反射它,只要把類名"person"傳遞給reflectionclass就可以了:

1    $class = new reflectionclass('person'); // 建立 person這個類的反射類 

2 $instance = $class->newinstanceargs($args); // 相當於例項化person 類

1)獲取屬性(properties):

1    $properties = $class->getproperties();

2 foreach ($properties as $property)

5 // 輸出:

6 // _allowdynamicattributes

7 // id

8 // name

9 // biography

預設情況下,reflectionclass會獲取到所有的屬性,private 和 protected的也可以。如果只想獲取到private屬性,就要額外傳個引數:

1    $private_properties = $class->getproperties(reflectionproperty::is_private);
可用引數列表:

通過$property->getname()可以得到屬性名。

2)獲取注釋:

通過getdoccomment可以得到寫給property的注釋。 

01    foreach ($properties as $property) 

07 }

08 // output:

09 // primary_autoincrement

10 // varchar

11 // text

3)獲取類的方法

4)執行類的方法:

1    $instance->getname(); // 執行person 裡的方法getname

2 // 或者:

3 $method = $class->getmethod('getname'); // 獲取person 類中的getname方法

4 $method->invoke($instance); // 執行getname 方法

5 // 或者:

6 $method = $class->getmethod('setname'); // 獲取person 類中的setname方法

7 $method->invokeargs($instance, array('snsgou.com'));

二、通過reflectionmethod,我們可以得到person類的某個方法的資訊:

是否「public」、「protected」、「private」 、「static」型別

方法的引數列表

方法的引數個數

反呼叫類的方法

1    // 執行detail方法

2 $method = new reflectionmethod('person', 'test');

3

4 if ($method->ispublic() && !$method->isstatic())

7 echo $method->getnumberofparameters(); // 引數個數

8 echo $method->getparameters(); // 引數物件陣列

php反射機制

php5 具有完整的反射api,新增對類 介面 函式 方法和擴充套件進行反向工程的能力。反射是什麼?它是指在php執行狀態中,擴充套件分析php程式,匯出或提取出關於類 方法 屬性 引數等的詳細資訊,包括注釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射api。反射是操縱物件導向范型中元模...

php反射機制

php5新增了一項新的功能 reflection,這個功能使得phper可以reverse engineer class,inte ce,function,method and extension,通過php 就可以得到某object的所有資訊,並且可以和它互動。反射是什麼?它是指在php執行狀態中...

PHP反射機制

reflectionclass類 class a public function publicfunction private function privatefunction protected function protectedfunction test方法 public function t...