欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

反射类的小实践

程序员文章站 2022-03-01 18:13:08
...

在不实例化类的情况下使用反射和闭包完成类中方法的调用,代码如下:

实例

<?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容器类中的对象管理部分,后期会把容器中的拆解成小的知识点,一一罗列,消化掌握。

运行实例 »