登录  /  注册
博主信息
博文 10
粉丝 0
评论 5
访问量 24791
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
反射类的小实践
晏南风i
原创
1398人浏览过

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

实例

<?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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
1条评论
jesse 2018-09-07 15:58:52
本案例有待解决的两个问题: 1、如果调用的方法是可变的,是不是应该去自动进行绑定操作? 2、每调用一次类中的方法,Container都要实例化一个新的对象出来,能不能把已经实例化过的类保存起来?
1楼
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学