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

2023-07-16  本文已影响0人  ZHG

突发奇想,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。

上一篇下一篇

猜你喜欢

热点阅读