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

这篇具有很好参考价值的文章主要介绍了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。文章来源地址https://www.toymoban.com/news/detail-577322.html

到了这里,关于PHP 在function中直接实例化interface,不用再class 后 implement的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读

    导读 : 前面章节,我们讲到过 接口(Interface)可以用于对「对象的形状(Shape)」进行描述。 本章节主要介绍接口的另一个用途,对类的一 部分行为进行抽象。 类配合实现接口 实现( implements )是面向对象中的一个重要概念。 一般来讲,一个类只能继承自另一个类 ,但

    2024年02月14日
    浏览(30)
  • 深入理解 TypeScript 的 type 以及 type 与 interface 和 class 的区别

    TypeScript 是一种强类型的 JavaScript 超集,它为 JavaScript 提供了静态类型系统。在 TypeScript 中,我们可以使用 type 、 interface 和 class 为数据定义类型。本文将重点介绍 type 的作用以及它与 interface 和 class 的区别。 type type 是 TypeScript 中用于定义类型别名、联合类型、交叉类型等复

    2024年02月03日
    浏览(30)
  • 不用996,不用007,赚的还比我多?我直接好家伙

    今天打开手机就看见信息99+,哟吼,还挺热闹——感情都在上班摸鱼呢。 好奇心让我点了第一条未读信息,好家伙,直接让我手机闪退出APP了! 嗨,我这暴脾气,直接手动滑到了第一条!但是我没想到到他们只是在日常卷,一水就水了那么多。 更奇葩的是群里的一个人的发

    2023年04月20日
    浏览(71)
  • 【开发工具】gitee还不用会?我直接拿捏 >_>

    🌈键盘敲烂,年薪30万🌈 目录 📕揭开git面纱 📕git的一些前置操作 📕如何获取本地仓库 📕本地仓库的操作 📕远程仓库操作 📕分支操作 📕标签操作 📕常见问题 注意:在使用git命令的时候一定要注意路径,在不同路径下执行相同命令结果也是不一样的例如创建和克隆仓

    2024年02月05日
    浏览(39)
  • 前端开发攻略---JS将class转换为function。满分写法无死角

    \\\'use strict\\\' : class中的代码全部都是在一个 严格模式 下,对于一些不安全的操作会抛出错误,使代码更加规范。 function Example(name) { ... } : 这是一个函数声明,函数名为  Example ,它接受一个参数  name 。这个函数充当了类的构造函数的角色。 函数名与class名相同 。 if (!new.targ

    2024年04月16日
    浏览(31)
  • IDEA直接请求controller,不用postman请求http接口

    generated-requests.http工具用法 第一步:点击下面按钮,HTTP Client  第二步、生成generated-requests.http文件  第三步、更改服务的ip和端口,启动服务  请求实例: 1、post请求,body传参: 2、get请求 2.1 2.2

    2024年02月15日
    浏览(38)
  • mac不用输入密码,无需输入密码,macOS 设置开机直接免密码进入桌面

    您是否厌倦了每次启动时输入密码?带MACOS设置打开桌面教程。输入台式机的此免费输入密码不是设置传统的操作方法来按下空密码以按在板上。 特定的操作步骤如下: 1.打开设置系统 – 安全性和隐私选项; 2.输入安全性和隐私设置的接口后,单击左下角的黄色锁,然后输

    2024年02月13日
    浏览(25)
  • Android 14 新 API:直接监听截屏操作,不用再观察媒体文件了~

    截屏可以说是手机设备最常用的功能了,Android 系统非常重视截屏方面的体验,近几年的更新都不忘去优化这方面的体验。 从一开始仅在通知栏提醒已截屏,到 Android 11 支持在左下角生成截屏缩略图供编辑或分享,再到 Android 12 支持滚动截屏,以及这次的 Android 14 允许 App 直

    2023年04月15日
    浏览(31)
  • PHP之Base64+php://filter绕过、disabled_function绕过

    目录 一、Base64+php://filter绕过 1.思路分析  2.实践验证 二、disabled_function绕过 上课讲了这样一道题,一起来看下(以下代码适用于PHP7.x及以上,5的版本会报错) 前端就是一个上传标签,没啥可看的 题目要求只能上传php文件,上传普通的一句话肯定不行,直接被过滤掉 普通Webs

    2024年02月12日
    浏览(35)
  • C++标准模板(STL)- 类型支持 (类型特性,is_union,is_class,is_function)

    类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。 试图特化定义于 type_traits 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。 定义于type_traits头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包