对接口编程,而不是 php 中的实现

2023-12-21

主要设计原则之一是针对接口编程而不是实现。这在 php 或任何其他弱类型语言中是否可能?

EDIT:

我可能没有把问题写得清楚。我并不是说 php 不能使用接口 - 它显然可以。我的意思是,“针对接口而不是实现进行编程”的设计原则在弱类型语言中是否变得多余。


是的。定义接口:

interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}

并实施它:

// Implement the interface
class Template implements iTemplate
{
    private $vars = array();

    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }

    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }

        return $template;
    }
}

PHP 接口手册:http://php.net/manual/en/language.oop5.interfaces.php http://php.net/manual/en/language.oop5.interfaces.php

我不知道为什么仅仅因为语言是弱类型就不可能有接口。


EDIT:拥有接口的目的(或多或少)是这样你就可以重用你的代码,而不管实际实现所述接口的类是什么。

假设你的程序使用一个接口Set,其中有方法addItem(), removeItem() and contains()。通过接口,您知道您将能够调用这 3 种方法中的任何一种,而不管底层是什么Set实现,无论是 HashSet、TreeSet 还是其他。

如果您使用弱类型语言,这一点不会改变;您仍然可以像使用强类型语言一样进行编码。我知道我的解释不太好,但我希望你能明白。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对接口编程,而不是 php 中的实现 的相关文章

  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • PHP 的password_verify() 是否可以抵御极长的密码(DoS 攻击)?

    一般攻击场景 2013 年 Django 存在一个普遍漏洞 攻击者可以通过非常大的密码创建极其密集的 CPU 计算 请参阅此处的安全通知 https www djangoproject com weblog 2013 sep 15 secu
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • 在 CodeIgniter 中添加新页面

    对于我对 CodeIgniter 和 MVC 系统的无知 我提前表示歉意 我正在帮助一位家庭成员处理他们的商业网站 到目前为止 我已经能够仅通过逻辑来完成大部分所需的更改 但现在我已经走进了死胡同 我不打算继续支持他们 因为我显然不是 Co
  • 将 PHP 中的 openssl AES 转换为 Python AES

    我有一个 php 文件 如下所示 encryption encoded key c7e1wJFz PBwQix80D1MbIwwOmOceZOzFGoidzDkF5g function my encrypt data key encrypt
  • zend 表单验证

    我想知道 Zend Form 如何验证输入 我的意思是它如何知道要验证哪些输入字段 我查看了 php 全局变量 POST GET 但没有看到任何设置为标识符 例如 的内容 以便了解如何验证 有人能给我推荐一些关于这些东西的指南吗 好吧 找出
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • Laravel 读写连接不同步

    我在 Laravel 5 2 应用程序中使用读写 MySQL 连接设置 mysql gt write gt host gt env DB HOST WRITE localhost read gt host gt env DB HOST RE
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • php隐藏所有错误[重复]

    这个问题在这里已经有答案了 隐藏的最佳做法是什么allPHP 错误 因为我不想向用户显示错误 我尝试过使用 htacess通过输入代码php flag display errors off在那里 但它返回给我一个500 error 还有其他
  • Apache 子进程已退出,状态为 255

    经过大量的搜索 尝试 修复 等待和哭泣 在我放弃之前 我想为这个错误抓住最后的机会 我们正在奔跑Microsoft Windows Server 2012 Apache 2 4 6 Win64 OpenSSL 1 0 1e PHP 5 5
  • 为什么 asort 适用于多维数组?

    抱歉 如果这是一个非常基本的问题 我无意中发现asort http php net manual en function asort php似乎适用于多维数组 示例 PHP animals array 1 gt array name gt
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • 如何绕过Access-Control-Allow-Origin?

    我正在一个平台上对我自己的服务器进行ajax调用 他们设置了阻止这些ajax调用的平台 但我需要它从我的服务器获取数据以显示从我的服务器数据库检索到的数据 我的 ajax 脚本正在运行 它可以将数据发送到我的服务器的 php 脚本以允许其处
  • PHP 中的异或加密

    我是 Xor 加密的新手 并且在使用以下代码时遇到了一些问题 function xor this string Let s define our key here key magic key Our plaintext ciphertext
  • 自定义 WordPress 画廊 html 布局

    当使用默认媒体上传器在 WordPress 中创建图像库时 WordPress 将图像包装在一堆 HTML 标记中 如何在生成之前覆盖它 以便我可以输出所需的标记并更改创建图库布局的方式 目前 WordPress 生成的代码如下 div d
  • 将 echo 和 print 合并到一个语句中

    echo 1 print 2 3 返回 214 脚本如何以 14 结尾 当你这样做时 echo 1 print 2 3 PHP 会做 demo http codepad viper 7 com OfrNrs line op fetch ex
  • 我如何向 Windows Server IIS 7 中的文件夹授予权限

    我是 PHP 和 Windows Server 新手 在查看我在 PHP 中创建的表单时遇到以下错误 Error in exception handler The stream or file C inetpub wwwroot wrp a
  • 使用 Swift 邮件程序发送邮件时出现错误 501

随机推荐

  • C++ builder XE 中带有圆角的窗体边框

    我借助以下代码制作了带有圆角的 C Builder XE 表单 BorderStyle bsNone void fastcall TForm1 FormCreate TObject Sender HRGN frmrgn frmrgn Cre
  • mvvm light - 消息传递

    我目前正在自学 MVVM 模式 我在消息传递的概念上遇到了第一个障碍 我知道消息传递包含在 mvvm light 工具包中 但我在任何地方都找不到使用示例 下载中没有提供示例项目 如果有人可以指导我一些有关如何在该工具包中使用消息传递的信息
  • 我可以在 vb .net 中使用关键字作为属性名称吗?

    我必须将一个类序列化 反序列化为 JSON 字符串 并返回 JSON Strinig 必须包含 error 字符串 例如 error something odd occoured id 23 result xxxxx 它指定发生的错误 我怎
  • Mac 键盘快捷键在 iOS 模拟器上不起作用

    All the mac keyboard short cuts like Cmd Q Quit Simulator app Cmd K Toggle keyboard hide show in Simulator etc has stopp
  • 使用 Linq PredicateBuilder 嵌套 OR

    我正在使用谓词生成器编写以下代码 IEnumerable
  • 使用 date-fns 进行时区转换

    我正在尝试在基于 React 的网页中使用 date fns tz 但无法使以下用例正常工作 我在表单中输入了一个日期 该表单应提交到以本地时区存储数据的后端 用户在GMT 2时区选择2021年2月1日 14 00在 UI 中 这与1612
  • 模型驱动表单 - IE11 上的输入占位符问题

    我已将我的应用程序从 Angular 2 x 更新到 Angular 4 0 0 从现在开始 我遇到输入类型文本表单控件的以下问题 在 IE11 上 当接收到焦点时 占位符将被删除 表单控件将设置为 dirty 并将 pristine 设置
  • 如何在重新启动之间保留 GoogleAppEngineLauncher 的本地数据存储?

    我在 Mac OS X 上使用 GoogleAppEngineLauncher GAEL 我的应用程序的数据存储状态在服务器重新启动甚至 GAEL 重新启动之间保持不变 但如果我重新启动 数据存储就会重置 是否有一个设置可以防止此重置 或者
  • 使用 NSComparisonResult 对 CoreData 实体进行排序

    我有这个 distanceSorter h distanceSorter m interface CLLocation DistanceComparison NSComparisonResult compareToLocation CLLo
  • 多个 Vue 实例需要多个 Vuex 模块实例

    我正在将 Vue 集成到表单网站上 这意味着如果页面上有多个表单 我必须创建该 Vue 应用程序的多个实例 所有实例共享同一个 Vuex 存储 我创建了一个 Vuex 模块 以便每个 Vue 实例都可以拥有自己的本地状态 我的主要目标是防止
  • 如何在 Hive 数组中搜索项目?

    我使用 Hive 创建了一个包含以下字段的表 ID 大整数 MSISDN 字符串 天丁 月小号 今年 性别微小 关系状态 TINYINT 教育弦 LIKES AND PREFERENCES STRING 通过以下 SQL 命令填充数据 In
  • 在 JavaFX 客户端中播放 h265 HEVC

    我有一个小型 JavaFX 应用程序可以在 Windows Linux 客户端上播放一些 GoPro 视频 过去我使用的是GoPro 4 我将视频下载到客户端并从本地存储播放 像这样 File file new File AnyVideo
  • 原生 PHP 中具有基本授权的 Soap 标头

    我需要连接到 TeraData SOAP API 该 API 现在需要与登录凭据一起发送授权基本标头 我不知道如何解决这个问题 添加基本 授权标头时 我在 SoapUI 中获得了工作权限 请任何人帮助我直接获取代码 这是 SoapUI 发送
  • 给定一个带有文件名的文本文件,如何在当前目录的子目录中查找文件?

    我在不同的子目录中有一堆具有不同名称的文件 我用这些名称创建了一个 txt 文件 但我无法创建find使用该文件进行工作 我看过关于创建列表的问题 不使用的帖子find 虽然不明白原因 建议 我很难举出一个例子 因为我不知道如何重现目录结构
  • Paypal 与 Google 应用程序引擎-python 集成

    我必须将 paypal 与我的应用程序集成 该应用程序是使用 python 构建在应用程序引擎补丁上的 我在网上搜索并发现 paypal 与谷歌应用程序引擎集成中报告的一些问题 如下所示 http groups google com gro
  • Firebase 的云功能 - getaddrinfo ENOTFOUND

    尝试使用 Paypal 的 API 发出请求PayPal 节点 SDK https github com paypal PayPal node SDK exports requestPayment functions https onReq
  • 致命错误导致没有结果出现(Mysqli)

    我在脚本中遇到此错误 我认为这导致搜索栏无法工作 致命错误 在第 89 行对 web stud xxx Mobile app previousquestions php 中的非对象调用成员函数 bind param 它指向的行是这一行 st
  • 将图标添加到 Visual Studio 代码扩展中的活动栏

    我是 VSC 扩展开发的新手 我从扩展 hello world 开始 我想向活动栏添加一个图标 并在单击它时收到通知 我将这些行添加到 package json viewsContainers activitybar id package
  • React-native Android 仅设置纵向手机否则平板电脑显示横向和纵向

    在这种情况下 我在我的应用程序中遇到了一个小问题 我设置了默认肖像 但现在我想在选项卡中显示肖像和风景 而不仅仅是手机 在手机中仅显示肖像 强制更新为肖像 我点击了此链接 但收到此错误 并且我不明白如何创建文件夹来放置数据 我点击了这个链接
  • 对接口编程,而不是 php 中的实现

    主要设计原则之一是针对接口编程而不是实现 这在 php 或任何其他弱类型语言中是否可能 EDIT 我可能没有把问题写得清楚 我并不是说 php 不能使用接口 它显然可以 我的意思是 针对接口而不是实现进行编程 的设计原则在弱类型语言中是否变