《PHP編程:php 的反射詳解及示例代碼》要點:
本文介紹了PHP編程:php 的反射詳解及示例代碼,希望對您有用。如果有疑問,可以聯(lián)系我們。
最近在看java編程思想,看到類型信息這一章,講到了類的信息以及反射的概念.順便溫故一下php的反射東西.手冊是這樣說的:"PHP 5 具有完整的反射 API,添加了對類、接口、函數(shù)、方法和擴展進(jìn)行反向工程的能力. 此外,反射 API 提供了方法來取出函數(shù)、類和方法中的文檔注釋."當(dāng)然手冊上說的有些抽象!所謂的逆向說白就是能獲取關(guān)于類、方法、屬性、參數(shù)等的詳細(xì)信息,包括注釋! 文字總是那么枯燥,舉個例子
PHP學(xué)習(xí)
class Foo { public $foo = 1; protected $bar = 2; private $baz = 3; /** * Enter description here ... */ public function myMethod() { echo 'hello 2b'; } } $ref = new ReflectionClass('Foo'); $props = $ref->getProperties(); foreach ($props as $value) { echo $value->getName()."\n"; } //output //foo //bar //baz
ReflectionClass 這個類返回時某個類的相關(guān)的信息,比如 屬性,方法,命名空間,實現(xiàn)那些接口等!上個例子中ReflectionClass:: getProperties 返回是 ReflectionProperty 對象的數(shù)組.PHP學(xué)習(xí)
ReflectionProperty 類報告了類的屬性的相關(guān)信息.比如? isDefault isPrivate? isProtected isPublic isStatic等,方法getName 是獲取屬性的名稱!PHP學(xué)習(xí)
以上是獲取屬性的,還有獲取類方法的比如
PHP學(xué)習(xí)
class Foo { public $foo = 1; protected $bar = 2; private $baz = 3; /** * Enter description here ... */ public function myMethod() { echo 'hello 2b'; } } $ref = new ReflectionClass('Foo'); $method = $ref->getMethod('myMethod'); $method->invoke($ref->newInstance());
ReflectionClass::getMethod 是反是一個 ReflectionMethod 類型 ,ReflectionMethod 類報告了一個方法的有關(guān)信息,比如 isAbstract isPrivate? isProtected isPublic isStatic?? isConstructor,還有一個重要的方法Invoke,InvokeArgs 就是執(zhí)行方法!PHP學(xué)習(xí)
其他的對象可以看看手冊,不是很難!PHP學(xué)習(xí)
那反射究竟有哪些用途?PHP學(xué)習(xí)
反射是一個動態(tài)運行的概念,綜合使用他們可用來幫助我們分析其它類,接口,方法,屬性,方法和擴展.還可構(gòu)建模式,比如動態(tài)代理.在一些php框架中使用反射也是很經(jīng)常,比如kohana,yii,下面是kohana 的實現(xiàn)mvc的代碼,就是用到了反射!PHP學(xué)習(xí)
// Start validation of the controller $class = new ReflectionClass(ucfirst(Router::$controller).'_Controller'); // Create a new controller instance $controller = $class->newInstance(); // Load the controller method $method = $class->getMethod(Router::$method); // Execute the controller method $method->invokeArgs($controller, $arguments);
上面的代碼可以清晰看到這個框架的流程!通過Router 其實就處理url的類,通過Router可以獲取哪個控制器、哪個方法!然后再執(zhí)行方法!PHP學(xué)習(xí)
以上就是對PHP 反射的資料整理,后續(xù)繼續(xù)補充相關(guān)資料,謝謝大家對本站的支持!PHP學(xué)習(xí)
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/3981.html