标签:php reflection
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 reflection
原文地址:http://blog.51cto.com/phpme/2053752