PHP 5 具有完整的反射 API,添加了對類、接口、函數、方法和擴展進行反向工程的能力。
下面我們演示一下如何通過反射,來調用執行一個類中的私有方法:
<?php
//MyClass這個類中包含了一個名為myFun的私有方法
class MyClass {
private $tmp = 'hello';
private function myFun()
{
echo $this->tmp . ' ' . 'world!';
}
}
//通過類名MyClass進行反射
$ref_class = new ReflectionClass('MyClass');
//通過反射類進行實例化
$instance = $ref_class->newInstance();
//通過方法名myFun獲取指定方法
$method = $ref_class->getmethod('myFun');
//設置可訪問性
$method->setAccessible(true);
//執行方法
$method->invoke($instance);
?>