class Food{ public $name = 'apple';}class Person{ const SEX = 'boy'; public $name; private $age; protected $hobbies = []; public function eat(Food $foodObj, string $waterName):string { return "eatting {$foodObj->name},drinking {$waterName}"; } public function hello() { return 'Hello world'; }}$instance = (new ReflectionClass('Person'))->newInstance();$reflectionMethod = new ReflectionMethod('Person', 'eat');//校验成员方法是否是public,可访问的if (!$reflectionMethod->isPublic()) { echo '不能访问Person类的eat方法' . PHP_EOL; return;}//ReflectionParametr对象组成的数组$parameters = $reflectionMethod->getParameters();if (empty($parameters)) { echo $reflectionMethod->invoke($instance);} else { $args = []; foreach ($parameters as $parameterObj) { if ($reflectionclass = $parameterObj->getClass()) { $className = $reflectionclass->getName(); $args[] = (new ReflectionClass($className))->newInstance(); } else { $args[] = 'hello'; } } echo $reflectionMethod->invoke($instance, ...$args);}
实现ReflectionClass对象
实现ReflectionMethod对象
实现ReflectionParameter对象
通过反射实现对象的依赖注入
PHP通过反射实现对象的成员方法调用
原文地址:http://blog.51cto.com/phpme/2053752