以下两件在两台独立的机器上工作
两台机器都是php5.5.x(不知道x是什么)
即一台机器只在一台机器上工作,另一台机器在两台机器上工作(use
)
请注意在第二个版本中使用关键字**use**
。
可悲的是,我没有命令行访问这些机器来检查PHP设置
第一版
$a = 1;
$b = function(){
echo $a;
};
$b();
第二版:
$a = 1;
$b = function() use($a){
echo $a;
};
$b();
答案 0 :(得分:0)
您的第一个闭包遇到了变量范围问题,闭包内部不存在$a
。您可以通过以下方式解决此问题:
global $a
。use
关键字。
>=
5.3 echo (function($a){ echo $a; })("test");
您应该启用错误报告,以了解为什么您的第一个关闭不应该首先起作用
ini_set("display_errors", 1);
error_reporting(-1);
$a = 1;
$b = function(){
echo $a; // Notice: Undefined variable: a in /path/to/script.php on line #
};
$b();
如果两台主机都运行PHP 5.5,则输出应该相同。可能是1抑制通知消息而另一个不是。如果是这种情况,您应该寻找的ini设置是:
error_reporting
display_errors
如上所示,您只需使用ini_set()
在脚本运行时更改这些设置,其中error_reporting(-1)
是ini_set('error_reporting', E_ALL | E_STRICT)
的简单快捷方式