在不实例化类的情况下使用反射和闭包完成类中方法的调用,代码如下:
实例
<?php class MyClass { protected $price = 5; public function get() { return $this->price; } public function set($price) { return $this->price = $price; } } class Container { public function invoke($callback, $args = NULL) { if($callback instanceof Closure) { $reflect = new ReflectionFunction($callback); $classinfo = $reflect->invoke(); $reflect = new ReflectionMethod($classinfo[0], $classinfo[1]); $object = new ReflectionClass($classinfo[0]); $object = $object->newInstance(); return $reflect->invoke($object,$args); } } } $cls = new Container; echo $cls->invoke(function(){ return ['MyClass', 'set']; }, 10); echo '<br>'; echo $cls->invoke(function(){ return ['MyClass', 'get']; }); // Tip: 代码设计思路参考与TP5.1容器类中的对象管理部分,后期会把容器中的拆解成小的知识点,一一罗列,消化掌握。
运行实例 »