什么是控制变量绑定在闭包中的php设置?

时间:2017-01-24 22:22:13

标签: php functional-programming closures bind php-5.5

以下两件在两台独立的机器上工作 两台机器都是php5.5.x(不知道x是什么) 即一台机器只在一台机器上工作,另一台机器在两台机器上工作(use) 请注意在第二个版本中使用关键字**use**。 可悲的是,我没有命令行访问这些机器来检查PHP设置 第一版

$a = 1;
$b = function(){
   echo $a;
};
$b();

第二版:

$a = 1;
$b = function() use($a){
   echo $a;
};
$b();

1 个答案:

答案 0 :(得分:0)

您的第一个闭包遇到了变量范围问题,闭包内部不存在$a。您可以通过以下方式解决此问题:

  1. 在闭包内定义global $a
  2. 使用第二个示例中的use关键字。
    • 仅适用于PHP版本>= 5.3
  3. 请改用参数
    • echo (function($a){ echo $a; })("test");
  4. 您应该启用错误报告,以了解为什么您的第一个关闭不应该首先起作用

    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)的简单快捷方式