美文网首页
PHP 在function中直接实例化interface,不用再

PHP 在function中直接实例化interface,不用再

作者: ZHG | 来源:发表于2023-07-16 13:16 被阅读0次

突发奇想,php能不能实现类似java 那种把interface 类当作方法的参数呢?

java 代码如下:

interface TestInterface{
    void test(String param);
}
public class Test(){
    private static TestInterface testInterface;
    public static  void setTestInterface(TestInterface testInterface){
        this.testInterface=testInterface;
    }
    public static void action(){
        this.testInterface.test("param") ;
    }

    public static void main(String[] args){
        Test test =new Test();
        test.setTestInterface(new TestInterface(){
            @Override
            public void test(String p){
               System.out.print(p);
            }
        })
    }
}

经过调查,在国内的帖子上没有找到类似的实现。只好求助于google 了。我在 stackoverflow 上发布了一个帖子,然而第二天被告知和其他问题重复了。我看了那个问题,和我想要的差不多。
stackoverflow上的回答
经过修改,PHP 实现的代码如下:

<?php
// 定义interface
interface TestInterface{
    public function test($p);
}
class Test{
    // 定义类内全局变量
    public TestInterface $testInterface;
    // interface 变量的set 方法(也可以说是interface具体实现)
    public function setTestInterface(TestInterface $interface){
        $this->testInterface = $interface;
    }
    // 使用interface 的具体操作
    public function action($p){
        $this->testInterface->test($p);
    }
    // 测试方法
    public function main($param){
        $this->setTestInterface(new class implements TestInterface{
            public function test($p){
                echo $p;// 打印传递进来的参数
            }
        });
        $this->action($param);
    }
}
// 测试
$test = new Test();
$test->main("test1");
$test->main("test2");

输入结果是

test1
test2

以上就是在php 中 interface 作为function函数的参数,怎么在方法中实现interface。

相关文章

  • 简单的工厂类demo

  • Python callable class

    python 实现了 call 方法的类可以实例化后当作function直接调用

  • JS 笔记--中级篇

    1、ECMAScript中的继承(inheritance) function clickMe() {/* 实例化基...

  • 原型 prototype

    构造函数模式 构造函数中的实例属性在各个实例化对象间是独立的 function Box(name, age) { ...

  • php 容器实现依赖注入

    依赖注入是通过 php 的映射函数,解析到类在实例化的时候所依赖的类,直接将类实例化 封装一个全局函数 使用

  • 06_JS面向对象

    创建函数的几种方式 函数的构造函数Function 在 js 中 使用Function可以实例化函数对象。也就是说...

  • extends与implements区别及使用

    这是实例化对象的两种写法 1.TS中interface与class区别 interface:接口之声明成员方法,不...

  • TP5控制器中使用视图的三种方法

    1、直接实例化视图类 1、视图类: thinkphp/library/think/View.php;2、命名空间:...

  • service层和model层应该全部使用静态类吗?

    静态类,即整个类全部使用静态方法。好处自然是不用讲,可以不用实例化。直接使用类名::方法调用。而实例化方法,必须先...

  • 单例模式

    一、单例就是只有一个实例,自行实例化并提供这个实例,这个类提供了一个访问的方式,可以直接访问,不用实例化。 二、实...

网友评论

      本文标题:PHP 在function中直接实例化interface,不用再

      本文链接:https://www.haomeiwen.com/subject/vhfwudtx.html