PHP經過反射來獲得類,以及一些基本的應用

這幾天在看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

相關文章
相關標籤/搜索