PHP中的闭包

5

我在PHP中使用闭包时遇到了一个奇怪的问题。将一个闭包赋值给一个变量时,我得到了一个null值。但是当使用var_dump()显示闭包时,一切都正常。

以下是总结该问题的源代码:

$f = function() {};
var_dump($f); // 'null'

var_dump(function() {}); // 'object(Closure)[1]'

我正在使用 PHP 5.3.1。
编辑:我忘记提到,只有在通过 Apache 使用 PHP 时才会出现此问题。使用 PHP CLI 时没有问题。

2
但根据3v4l的数据,它可运行..有点奇怪。http://3v4l.org/SFd06 - reikyoushin
1
奇怪。我得到了这个输出(据我所知是正确的)。 - Amal Murali
2
尝试精确地运行该代码,以确保您的摘要与实际代码不同。 - John V.
无论错误(明显的漏洞)如何,我认为没有任何理由使用空的“Closure”。只需使用“null”并在使用之前验证是否可调用即可。PS:在“5.5.1”中已修复。 - CodeAngry
1
@Jack 这一定是个bug。因为我刚在5.5.1上运行了代码,它按预期工作。所以...已经修复了。 - 因此它是一个bug,逻辑如此。不幸的是,我现在太忙了,无法进行bug研究。而且这个bug永远不会影响到我,因为我完全没有写空闭包的理由。我通常编写有用的函数。 - CodeAngry
显示剩余5条评论
2个回答

2
一位同事找到了问题的答案:罪魁祸首是eAccelerator!显然,它与PHP 5.3闭包不兼容...(来源) 禁用它解决了问题。
感谢您的帮助!

1
考虑进行更新。他们声称他们的网站支持5.4版本。PS:这是您第一次使用闭包吗?闭包可能是本十年中最有用的PHP功能,它们只存在了4年时间。 - CodeAngry
如果由我决定,我会一直使用PHP 5.4或5.5,但我在专业环境中使用... - scastiel

0

这可能是一个非常罕见的(并且已经修复的)错误,或者您没有展示出导致NULL的完全相同的用法。我猜您是在使用第一个 var_dump()

var_dump($f());

请注意括号,它们会导致函数被执行,因此您可以获得其返回值。

不是的,我复制粘贴了代码。当我写 $f() 时出错了。(这很合理,因为 $f 被评估为 null。) - scastiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接