PHP的反射類ReflectionClass是用來獲取類的反射信息的工具,可以獲取類的屬性、方法、接口、父類等信息。使用ReflectionClass可以實現一些高級的反射功能,比如動態實例化類、調用類的私有方法等。
下面是使用ReflectionClass的簡單示例:
class MyClass {
private $property;
public function __construct($value) {
$this->property = $value;
}
private function privateMethod() {
echo 'This is a private method';
}
public function publicMethod() {
echo 'This is a public method';
}
}
// 創建ReflectionClass對象
$reflection = new ReflectionClass('MyClass');
// 獲取類的屬性
$properties = $reflection->getProperties();
foreach ($properties as $property) {
echo $property->getName() . "\n";
}
// 獲取類的方法
$methods = $reflection->getMethods();
foreach ($methods as $method) {
echo $method->getName() . "\n";
}
// 調用類的公有方法
$instance = $reflection->newInstance('Hello');
$instance->publicMethod();
// 調用類的私有方法
$privateMethod = $reflection->getMethod('privateMethod');
$privateMethod->setAccessible(true);
$privateMethod->invoke($instance);
上述示例中,首先創建了一個名為MyClass的類,其中包含一個私有屬性和兩個方法。然后使用ReflectionClass創建了一個MyClass的反射對象$reflection,通過該對象可以獲取類的屬性和方法。最后通過反射對象實例化類、調用類的公有方法以及調用類的私有方法。
需要注意的是,ReflectionClass的構造函數需要傳入類的名稱作為參數。另外,調用私有方法之前需要使用ReflectionMethod的setAccessible方法將方法設置為可訪問。