這幾天在看laravel框架的核心代碼。發現大量的使用了反射機制。下面就來簡單看看一些反射的應用php
class A { private $_foo = 'this is a'; public function index() { return $this->_foo; } private function _come($param) { return 'this is come'.$param; } } $refClass = new ReflectionClass('A');//得到反射
下面咱們來經過這個反射來獲得A
的私有屬性html
$privateParams = $refClass->getDefaultProperties(); print_r($privateParams);//獲得結果 Array ( [_foo] => this is a ) echo $privateParams['_foo'];//獲得 this is a
這樣咱們就能夠很輕鬆的得到A
的私有屬性了。那麼執行私有方法應該怎麼操做呢。接下來咱們先看執行共有方法,執行公有方法比較簡單。laravel
/****************得到類的實例*******************/ $class = $refClass->newInstance(); echo $class->index();
這樣就能夠調用公有的方法了。下面看執行私有方法框架
/****************獲取A的方法*******************/ $refHasClass = $refClass->getMethods(); print_r($refHasClass); /*** * Array ( [0] => ReflectionMethod Object ( [name] => index [class] => A ) * [1] => ReflectionMethod Object ( [name] => _come [class] => A ) ) */ $come = $refClass->getMethod('_come'); $come->setAccessible(true); echo $come->invoke($class,'this is param'); // this is athis is comethis is param
先經過getMethod()
就能夠獲取到come
方法,而後設置come
方法的可訪問性。最後經過invoke
執行該方法this
反射還有不少可用的方法,這裏就不一一說了。有興趣的能夠看看 官方文檔
原文地址.net