通过反射来访问类的私有属性或者调用类的私有方法
一般来说类的私有属性和私有方法只能在类的内部进行使用,但是我们可以通过反射类在类的外部进行使用私有属性和私有方法
class Test { private $str = 'this is private property;'; private function play() { return 'this is private function;'; } } // 获取反射类及反射属性 $class = new \ReflectionClass(Test::class); // 获取Test类的私有方法play $method = $class->getMethod("play"); // 设置方法可访问 $method->setAccessible(true); // 获取Test类的私有属性$str $property = $class->getProperty('str'); // 设置属性可访问 $property->setAccessible(true); // 获取Test类的实例 $foo = new Test(); // 获取对象属性值 // 注意:只能通过 ReflectionProperty 实例的 getValue 方法访问 // 不能这样直接访问: $foo->bar; echo $property->getValue($foo); // 获取对象的方法 echo $method->invoke($foo);