对接口编程,而不是 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 中的实现 的相关文章

  • 纠正装饰器模式的一个大缺点

    不久前 我在重构一些游戏战斗代码时决定尝试装饰器模式 战斗者可以拥有各种被动能力 也可能是不同类型的生物 我认为装饰器可以让我在运行时以各种组合添加行为 因此我不需要数百个子类 我几乎已经完成了 15 个左右的被动能力装饰器 在测试中我发现
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • 检查 PHP 中“@”字符后面的单词

    我现在正在制作一个新闻和评论系统 但是我已经在一个部分上停留了一段时间了 我希望用户能够在 Twitter 上引用其他玩家的风格 例如 用户名 该脚本看起来像这样 不是真正的 PHP 只是想象脚本 3 string I loved the
  • 如何从父类函数访问子类中定义的常量?

    我从 php net 看到这个例子 但 c MY CONST 仅在 5 3
  • posts_search 中的自定义查询

    如何使用此查询作为我的自定义搜索查询 add filter posts search my search is perfect 20 2 function my search is perfect search wp query sWord
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B

随机推荐

  • 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 不能使用接口 它显然可以 我的意思是 针对接口而不是实现进行编程 的设计原则在弱类型语言中是否变