PHP 中的闭包……它们到底是什么以及什么时候需要使用它们?

2024-02-11

所以我正在以一种良好的、最新的、面向对象的方式进行编程。我经常使用 PHP 实现的 OOP 的各个方面,但我想知道什么时候可能需要使用闭包。有没有专家可以阐明何时实施闭包有用?


PHP 将在 5.3 中原生支持闭包。当您想要一个仅用于某些小型特定目的的本地函数时,闭包是很好的选择。这RFC 关闭 http://wiki.php.net/rfc/closures举了一个很好的例子:

function replace_spaces ($text) {
    $replacement = function ($matches) {
        return str_replace ($matches[1], ' ', ' ').' ';
    };
    return preg_replace_callback ('/( +) /', $replacement, $text);
}

这可以让您定义replacement内部局部函数replace_spaces(),所以它不是:
1)弄乱了全局命名空间
2)让三年后的人们想知道为什么有一个全局定义的函数只在另一个函数中使用

它让事情井井有条。请注意函数本身没有名称,它只是定义并分配为对的引用$replacement.

但请记住,您必须等待 PHP 5.3 :)

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

PHP 中的闭包……它们到底是什么以及什么时候需要使用它们? 的相关文章

  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我
  • Readfile 从大文件中读取 0 字节?

    我正在尝试通过以下方式发送一个大文件readfile 但是 没有任何内容发送到浏览器 并且readfile 回报0 not false 我尝试发送的文件大小为 4GiB 并且可由 PHP 读取 我正在设置set time limit 0 以
  • 所有 PHP 相等比较都是对称的吗?

    Is a b总是等价于 b a 我认为在 JavaScript 中 由于强制转换 有一些奇怪的情况并非如此 I think ide https stackoverflow com questions 4752579 are all php
  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • php源代码到PO文件生成器

    我必须将我的所有回显 打印字符串转换为PHP源代码代码文件到PO file 为了语言翻译 有批次吗对流器可用于相同的 我如何做到这一点 make gettext在您的服务器上运行 setup a 翻译适配器 例如带有 gettext 适配器
  • laravel - 使用请求类或输入类

    在宁静的控制器中 我应该使用哪个类来获取传递的变量 member gt email Input get email or member gt email Request get email 两种选择都适合我 但有什么区别 Input get
  • php中的条件格式化html表与时间戳比较

    echo table style width 100 tr echo td Order td echo td Destination td echo td Location td echo td Status td echo td Time
  • 在 PHP 中比较两个对象的最快方法是什么?

    假设我有一个对象 在本例中为 User 对象 并且我希望能够使用单独的类来跟踪更改 用户对象不必以任何方式改变它的行为才能发生这种情况 因此 我的单独的类创建它的 干净 副本 将其存储在本地某个位置 然后可以将 User 对象与原始版本进行
  • 如何防止在 PHP 中使用超出“使用”范围的特征方法

    我想知道是否有任何方法可以防止在 PHP 的任何类上下文之外使用特征方法 让我用一个简短的例子来解释我想要什么 这是我当前的代码 File MyFunctions php trait MyFunctions function hello w
  • 使用 PHP PayPal REST API 退款?

    我正在开发一个集成到 PayPal 的 REST API 中的 PHP 应用程序 我正确处理了事务并将事务 ID 保存到 MySQL 数据库中 我现在正在尝试退款 但无法让它停止给出 传入 JSON 请求未映射到 API 请求 错误 有人对
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 在 WooCommerce 中添加到购物车之前清空购物车

    我正在使用 WP 作业管理器和 Woo Subscriptions Now 最初 我选择了一个套餐 Woo Subscription 然后我添加了所有细节 但没有提交 回到网站 所以要再次购买 我需要选择一个套餐 于是我选择了套餐并填写了详
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之

随机推荐

  • 使用 VB 写入大量记录以进行访问

    我目前正在 Visual Studio 中编写一些软件 以使用 SQL 分析来自 Access 数据库的大量数据 我有代码可以创建一个新的计算变量 但我很难解决将数据写回 Access 所需的时间 我目前正在使用一些 vb com 代码与在
  • Java 消息服务 (JMS) 的用途是什么?

    我目前正在评估 JMS 但不知道它可以用来做什么 目前 我相信这将是一个用例 我想创建一个 SalesInvoice PDF 并在 SalesOrder 离开仓库时打印它 因此在交付事务期间 我可以发送一个事务打印请求 该请求在 Sales
  • OkHttpClient 的 NoClassDefFoundError

    在 gradle 中添加 facebook 依赖项后 我收到此运行时错误 compile com facebook android facebook android sdk 4 6 0 请注意 我也在使用 okhttp compile co
  • 用于移动物体的近似增量最近邻算法

    Bounty 这个问题提出了几个问题 赏金将用于全面解决这些问题的答案 这是我一直在玩的一个问题 NOTE我对以下解决方案特别感兴趣不基于欧几里得空间 有一组 Actor 形成大小为 K 的人群 距离d ActorA ActorB 对于任何
  • 避免 C++11 原始字符串文字中的第一个换行符?

    C 11 中的原始字符串文字非常好 只是格式化它们的明显方式会导致多余的换行符 n作为第一个字符 考虑这个例子 some code std string text R This is the first line This is the s
  • 使用 PHP 将下拉列表中的数据插入数据库

    首先 我需要一个可以轻松更新的下拉列表 因此我创建了一个名为 制造商 我在表格中列出了要选择的制造商 我终于用这段代码完成了这个
  • 在 Rust 中使用 Any 和特征 [重复]

    这个问题在这里已经有答案了 我正在尝试实施PartialEq在 Rust 中寻找具有子类型的特征 以便我可以将它们作为装箱指针添加到容器中 然后比较它们 这是我的缩小版实现 use std any Any trait Foo Any str
  • 编写一个递归函数来反转输入字符串

    我一直在读 C For Every 一书 其中一个练习说要编写一个函数string reverse string str 其中返回值是相反的str 有人可以写一些基本代码并向我解释吗 从昨天开始我就一直盯着这个问题 想不通 我得到的最远的是
  • 忽略 jax-rs 中传入的 json 元素

    我想知道该放在哪里 JsonIgnoreProperties ignoreUnknown true 在 Java REST API 中 我有以下课程 import org codehaus jackson annotate JsonIgno
  • 从按钮重新启动 Intro.Js 之旅?

    有没有办法通过按钮重新启动 Intro Js 我目前已将其设置为在页面加载时运行 并使用 JSON 中定义的步骤运行 效果很好 不过 我希望用户可以通过帮助按钮访问该导览 以便在需要时进行参考 我努力了 introJs setOptions
  • 将 Entity Framework 4.0 与 WCF 4.0 一起使用时出现 DataContractSerializer 错误

    我尝试通过 WCF 从实体框架检索对象列表 但收到以下异常 尝试序列化参数时出错http tempuri org GetAllResult http tempuri org GetAllResult InnerException 消息为 类
  • Android 模拟器警告访客未在线 - 如何关闭新的快速启动功能?

    我有过一次非常糟糕的使用经历模拟器快速启动 https android developers googleblog com 2017 12 quick boot top features in android html 它假设允许模拟器在
  • Powermock mockstatic 无法子类化最终类

    我想模拟最后一堂课 PowerMockito mockStatic TestFinalClass class 当我运行单个 junit 并将 javaagent 添加到我的 VM 参数时 它正在从我的 Eclipse 中运行 javaage
  • 如何隐藏 iPhone 标签栏?

    我有一个小型多视图应用程序 它由一个UITabBarController每个选项卡中都有一个导航控制器 我想要的是展示一个UIImageView当用户摇动设备时 在我实现了加载之后UIImageView 我遇到了一个问题 由于选项卡和导航栏
  • IE10控制台无法通过命令document.cookie看到cookie

    IE10控制台无法通过命令看到cookiedocument cookie 但请在请求中发送它们 Update 有趣的是 我正在使用 10 0 9200 16519 它似乎按预期为我工作
  • 为什么 GCC 仅仅通过将其放入循环中就被欺骗以允许未定义的行为?

    以下内容是无意义的 但可以干净地编译g Wall Wextra Werror Winit self 我测试了GCC 4 7 2和4 9 0 include
  • C#:WPF 中的拖放(Richtextbox)

    我想在 WPF 中实现拖放机制 但它不起作用 使用 Windows 窗体 它可以工作 首先我将AllowDrop 设置为True 在 Windows 窗体中 您已经可以将项目拖动到 RichTextBox 中 并且光标会发生变化 对于 WP
  • 无法构建 protobuf 去端点

    使用protobuf版本2 6 1 我通过自制程序安装 我正在尝试跑步 protoc go out cloud proto 我不断收到此错误 protoc gen go program not found or is not executa
  • Lollipop 及以上版本的仪器测试“未找到测试”

    我的基于仪器 浓缩咖啡 的测试无法在 Lollipop 设备和模拟器上运行 它们可以在任何其他平台上正确运行 我和这个帖子里的人有同样的症状https groups google com forum fromgroups topic adt
  • PHP 中的闭包……它们到底是什么以及什么时候需要使用它们?

    所以我正在以一种良好的 最新的 面向对象的方式进行编程 我经常使用 PHP 实现的 OOP 的各个方面 但我想知道什么时候可能需要使用闭包 有没有专家可以阐明何时实施闭包有用 PHP 将在 5 3 中原生支持闭包 当您想要一个仅用于某些小型