我们知道,类的protected方法是无法通过对象来访问的,这是处于安全考虑。
如果要访问这个方法,通常的做法是在创建一个Public方法来间接调用。
这里我们使用反射来实现访问。
class Test {
protected function meth(){
return Test::class;
}
}
$obj = new Test();
var_dump($obj->meth());
PHP Fatal error: Uncaught Error: Call to protected method Test::meth() from context ‘’
修改后
class Test {
protected function meth(){
return Test::class;
}
}
$obj = new Test();
$refClass = new ReflectionClass(Test::class);// 传入对象或类名,得到ReflectionClass对象
$refMeth = $refClass->getMethod('meth'); // 得到ReflectionMethod对象
$refMeth->setAccessible(true);// 设置为可见,也就是可访问
$ret = $refMeth->invoke($obj);// 传入对象来访问这个方法
var_dump($ret);// string(4) "Test"