在不实例化类的情况下使用反射和闭包完成类中方法的调用,代码如下:
<?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容器类中的对象管理部分,后期会把容器中的拆解成小的知识点,一一罗列,消化掌握。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号