【问题标题】:Concerning PHP and Closures [closed]关于 PHP 和闭包 [关闭]
【发布时间】:2011-10-04 11:56:39
【问题描述】:
  • PHP 5.3 中是否可以使用闭包?
  • 我正在寻找一个简单的闭包示例,欢迎使用最少的代码。
  • 如果 PHP 5.3 中可以使用闭包,那么它在作用域方面的行为是否类似于 Javascript 的闭包?
  • Javascript 闭包和 PHP 闭包(如果存在)有什么区别?

【问题讨论】:

  • 我认为您应该阅读文档,因为它真的很有帮助。 php.net/manual/en/functions.anonymous.php你已经阅读了吗?
  • @FinalForm:闭包是带有外部函数的匿名函数,匿名函数是闭包,分别带有0外部引用。我不知道,如果“作家是一个智障”,但这种说法并不完全错误(即使它并不完全正确)。
  • @FinalForm:这并不意味着您无法阅读该页面的其余部分。您会在几秒钟内意识到这就是您要寻找的“示例 3:闭包和范围界定”
  • @KingCrunch 闭包是外部函数内部嵌套函数的组合,涉及在外部函数返回后持续存在的内存堆栈,环境与在其自身环境中起作用的函数的绑定。匿名函数是在缺少名称的程序流中立即执行的函数,因此它是匿名的。所以闭包和匿名函数不是一回事。匿名函数“可以”是闭包,但不是闭包。
  • @FinalForm: 哇,我不知道,从哪里开始...... 例如:匿名通常不会立即执行,因为在这种情况下没有人需要(匿名)函数,但是一个可以直接把代码放到位。匿名函数只是通常由没有标识符的变量引用的函数。闭包的唯一区别是您自己提到的“环境的绑定”,但现在它只是一个观点,如果一个非函数是一个没有任何绑定的闭包,我们不是。但是,如果您知道什么是闭包,为什么要问这个问题?

标签: php javascript closures


【解决方案1】:
  • PHP 5.3 中是否可以使用闭包?

是的

  • 我正在寻找一个简单的闭包示例,欢迎使用最少的代码。
$text = "Hello World";
$closure = function () use ($text) { echo $text; }
$closure();
  • 如果 PHP 5.3 中可以使用闭包,那么它在作用域方面的行为是否类似于 Javascript 的闭包?
  • Javascript 闭包和 PHP 闭包(如果存在)有什么区别?

不知道。我从来没有深入了解过 JS 闭包,但在阅读 Wikipedia: Closure (Computer Science)

之后,您可能会了解 PHP 闭包是什么样的

【讨论】:

  • 关于作用域的说明:闭包的行为就像 PHP 中的任何函数/方法一样,它们会产生本地作用域;与 javascript 不同,它可以像平常一样访问“全局”变量。为了解决这个问题,闭包使用use($var) 语句从本地范围之外获取变量。您也可以使用use(&$var) 修改外部变量,use($var, $params) 修改多个变量。
  • 你也可以在 PHP 的闭包中访问全局变量,但是在 PHP 中不鼓励使用全局变量,独立于闭包、函数或方法。 use()-statement 是闭包与简单匿名函数的不同之处:它创建对非局部变量的引用(参见维基百科文章)。
  • 在使用之前声明global $var;,是的;但是当您在类方法中使用闭包时,使用 global 并不能按预期工作(确实如此,它只是进入根目录,而不是上一级)。
  • @adlawson @KingCrunch 我在 PHP.net 上查找 use() 时遇到问题,你能链接我吗?
  • @adlawson:当然globals 的意思是“全球”,而不仅仅是“这个和所有孩子”、“提升一个级别”或其他什么。但是,无论如何都不推荐全局变量;)因此,我不知道我们为什么要谈论它们:它们的行为与往常一样,仅此而已。 @FinalForm:php.net/manual/en/functions.anonymous.php(在您的问题的 cmets 中已经提到)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 2015-10-12
  • 1970-01-01
相关资源
最近更新 更多