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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值