码迷,mamicode.com
首页 > Web开发 > 详细

PHP通过反射实现对象的成员方法调用

时间:2017-12-22 23:56:55      阅读:162      评论:0      收藏:0      [点我收藏+]

标签: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); }


  1. 实现ReflectionClass对象

  2. 实现ReflectionMethod对象

  3. 实现ReflectionParameter对象

  4. 通过反射实现对象的依赖注入


PHP通过反射实现对象的成员方法调用

标签:php   reflection   

原文地址:http://blog.51cto.com/phpme/2053752

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!