045-利用反射机制,简单的实现php插件模式(代码片段)

tianpan2019 tianpan2019     2022-12-18     635

关键词:

<?php
//利用反射机制,简单的实现PHP插件模式
#    假设,我们有一款开源产品,所有开发者都必须在我定制的需求之上,进行二次开发,
#    而开发完成后的新模块,就是一个不一样的新插件,可以放在特定的位置进行自动加载

#这是我们的开源产品
    interface Demo
        # 所有插件都必须实现这个方法
        public function msg();
    
    
    #这是小明开发的插件-1
    class xiaoming implements Demo
        public function msg()
            echo ‘小明:我就静静地看着你装逼<br/>‘;
        
    
    
    #这是小李开发的插件-2
    class xiaoli implements Demo
        public function msg()
            echo ‘小李:我就装逼了,你能拿我咋滴?<br/>‘;
        
    
    
    #我们先搜索该插件类,并且判断它是否实现了msg方法
    function find()
        # 定义描述插件的数组(是一个实例)
        $plugin = array();
    
        foreach (get_declared_classes() as  $class) 
            $reclass = new ReflectionClass($class);
    
            # 检测类是否继承与接口Demo
            if ($reclass->implementsInterface(‘Demo‘)) 
                $plugin[] = $reclass;
            
        
        return $plugin;
    

/**
 * 编写一个监听所有插件对应的msg方法 的函数
 */
    function myexec()
        foreach (find() as $plugin) 
            # 判断该插件是否拥有msg方法
            if($plugin->hasMethod(‘msg‘))
                # 得到这个方法类的一个实例
                $remethod = $plugin->getMethod(‘msg‘);
                # 如果它是静态方法,则直接调用即可
                if($remethod->isStatic())
                    $remethod->invoke(null);
                else
                    # 先声明插件类的一个实例,然后调用它
                    $pluins = $plugin->newInstance();
                    $remethod->invoke($pluins);
                
            
        
    

# 监听所有插件
myexec();
?>

技术图片

 

java--反射机制原理几种class获取方式及应用场景(代码片段)

...1f3b6;3.3.2什么是动态代理?🎧3.3.3动态代理中如何利用Java反射机制?📢3.4JavaJDBC数据库操作实现🎹3.4.1利用反射加载JDBC驱动🎸3.4.2Java 查看详情

利用java反射机制来实现一个servlet处理多种请求

如果我们想在一个servlet中处理多种请求(比如新闻的添加、删除),简单的可以在jsp提交表单的action路径中添加一个键值对,然后再servlet中接收后根据不同的值来调用不同的方法。jsp端1<formaction="newsServlet?method=add"method="post"&g... 查看详情

如何利用缓存机制实现java类反射性能提升30倍

1SSM框架简介SSM框架,即SpringMVC+Spring+Mybatis三个开源框架整合在一起的缩写。在SSM框架之前生产环境中SSH框架占据多数,即Struts2+Spring+Hibernate三个开源框架整合而成。后因Struts2爆出众多高危漏洞,导致目前SSM逐渐代替SSH成为主流... 查看详情

小白也能看懂的插件化droidplugin原理--反射机制和hook入门

  前言:在上一篇博文《小白也能看懂的插件化DroidPlugin原理(一)--动态代理》中详细介绍了DroidPlugin原理中涉及到的动态代理模式,看完上篇博文后你就会发现原来动态代理真的非常简单,只不过就是实现一个InvocationHandler... 查看详情

利用反射机制实现对象转map集合(代码片段)

分析问题问题主要有以下几点如何获取对象中的属性的名称?如何获取对象的属性值?如何这个属性被private修饰,该如何处理?返回的是一个对象该如何获取对象的属性参数呢?解决问题问题1:可以使用反射来获取POJO对象的get方法... 查看详情

利用java反射机制实现对象相同字段的复制

一。如何实现不同类型对象之间的复制问题?1、为什么会有这个问题?近来在进行一个项目开发的时候,为了隐藏后端数据库表结构、同时也为了配合给前端一个更友好的API接口文档(swaggerAPI文档),我采用POJO来对应数据表结... 查看详情

反射机制-动态代理

目标:掌握代理机制的作用掌握InvocationHandler接口,和Proxy类的作用。具体内容代理设计,一个操作的接口有两个子类,其中一个是真实主题的实现类。另一个是代理实现类。可以复习之前的代理设计模式:接口与抽象类的应用... 查看详情

如何利用缓存机制实现java类反射性能提升30倍

一次性能提高30倍的JAVA类反射性能优化实践。文章来源:宜信技术学院&宜信支付结算团队技术分享第4期-支付结算部支付研发团队高级工程师陶红《JAVA类反射技术&优化》分享者:宜信支付结算部支付研发团队高级工程师... 查看详情

策略模式

...结合简单工厂模式,更高级地用法可能需要我们掌握Java反射机制。简单工厂模式我们在最早的时候介绍,我们也谈到了一点Java的反射机制。借着学习策略模式的机会,我们顺便复习一下简单工厂模式和反射。先说说何为策略模... 查看详情

java利用反射实现注解简单功能

//自定义一个简单的注解@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD,ElementType.PARAMETER,ElementType.LOCAL_VARIABLE})public@interfaceDougest{Stringvalue()def 查看详情

工厂模式(factorypattern)和java反射机制优化思考

...的子类,必须修改工程类的相关逻辑(后面我们用java的反射机制进行优化) 从上面UML图看到,我们设置了一个Shape接口,并且实现了三个子类,我们通过ShapeFactory来根据不同的名称返回不同的子类实例,通过Factory 查看详情

js反射机制

...能够在运行时知道自己有哪些方法和属性。在JavaScript中利用for(…in…)语句实现反射在JavaScript中有一个很方便的语法来实现反射,即for(…i 查看详情

用php的反射实现委托模式的讲解_php技巧-php

...没有指定被委托类,那么缺省的父类就是Object。下面是PHP反射机制实现动态代理的代码:target[]=newFruit();function__call($name,$args)foreach($this->targetas$obj)$r=newReflectionClass($obj);if($method=$r->getMethod($name))if($method->isPublic()&&a 查看详情

java讲课笔记36:初探反射机制

...Java反射的动态性质(三)如何理解Java反射的原理(四)利用反射可实现的功能二、Java反射常用API三、使用反射的基本步骤四、利用反射获取类的信息(一)获取Class对象1、调用对象的getClass()方法2、调用类的class属性3、使用Clas... 查看详情

java委托机制

...个语言级特性,而在Java语言中没有直接的对应,但是java利用反射即可实现委托!委托者接 查看详情

php反射机制(代码片段)

...实例也可以访问类的成员和方法。PHP自5.0版本以后添加了反射机制,它提供了一套强大的反射API,允许你在PHP运行环境中,访问和使用类、方法、属性、参数和注释等,其功能十分强大,经常用于高扩展的PHP框架,自动加载插件... 查看详情

php反射机制(代码片段)

...实例也可以访问类的成员和方法。PHP自5.0版本以后添加了反射机制,它提供了一套强大的反射API,允许你在PHP运行环境中,访问和使用类、方法、属性、参数和注释等,其功能十分强大,经常用于高扩展的PHP框架,自动加载插件... 查看详情

jdk动态代理的简单理解

...,提供预处理、过滤、事后处理等服务,动态代理及通过反射机制动态实现代理机制。JDK中的java.lang.reflect.Proxy类可以用来实现动态代理。首先,准备一个简单的接口和实现类/***接口IHello.ja 查看详情