PHP反射:强行访问一个受保护的方法

我们知道,类的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"
发布了412 篇原创文章 · 获赞 25 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/103888363