博客列表 >反射类的小实践

反射类的小实践

晏南风i
晏南风i原创
2018年09月10日 23:08:211443浏览

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

实例

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

运行实例 »



声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
jesse2018-09-07 15:58:521楼
本案例有待解决的两个问题: 1、如果调用的方法是可变的,是不是应该去自动进行绑定操作? 2、每调用一次类中的方法,Container都要实例化一个新的对象出来,能不能把已经实例化过的类保存起来?