介紹機制:
反射是在php執行狀態中,擴充套件分析php程式,匯出或提取出關於類、方法、屬性、引數等的詳細資訊,包括注釋。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為反射api。反射是操縱物件導向范型中元模型的api,其功能十分強大,可幫助我們構建複雜,可擴充套件的應用。
其用途如:自動載入外掛程式,自動生成文件,甚至可用來擴充php語言。
php反射api由若干類組成,可幫助我們用來訪問程式的元資料或者同相關的注釋互動。借助反射我們可以獲取諸如類實現了那些方法,建立乙個類的例項(不同於用new建立),呼叫乙個方法(也不同於常規呼叫),傳遞引數,動態呼叫類的靜態方法。
反射api是php內建的oop技術擴充套件,包括一些類,異常和介面,綜合使用他們可用來幫助我們分析其它類,介面,方法,屬性,方法和擴充套件。這些oop擴充套件被稱為反射。
通過reflectionclass,我們可以得到person類的以下資訊:
1)常量 contants
2)屬性 property names
3)方法 method names靜態
4)屬性 static properties
5)命名空間 namespace
6)person類是否為final或者abstract
<?php
header("content-type:text/html;charset=uft-8");
class person
public function setid($v)
public function getname()
public function setname($name)
public function getage()
public function setage($age)
} //建立 person這個類的反射類
$class = new reflectionclass('person');
$instance = $class->newinstanceargs();//相當於例項化person 類
/*獲取屬性*/
echo "
------------
"; $properties = $class->getproperties();
foreach($properties as $property)
/*獲取方法*/
echo "
------------
"; $mathods = $class->getmethods();
foreach($mathods as $mathod)
/*執行方法1*/
echo "
------------
"; $ec=$class->getmethod('getid'); //獲取person 類中的getgetid方法
$ec->invoke($instance); //執行getid 方法
echo "
------------
"; /*執行方法2*/
$me = new reflectionmethod($instance,'getid');
$me->invoke($instance);
echo "
------------
"; /*執行傳參方法3*/
$me2 = new reflectionmethod($instance,'setage');
$me2->invokeargs($instance,array('18'));
//驗證函式執行結果是否正確
echo "
------------
"; $me2 = new reflectionmethod($instance,'getage');
$me2->invoke($instance);
?>
執行結果
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...