美文网首页
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。

    相关文章

      网友评论

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

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