在指定的匿名函数中分配匿名函数

时间:2014-09-11 03:49:10

标签: php

我做了一个尝试在匿名函数中调用匿名函数的实验,但它没有工作并且出现了一些错误:

E_NOTICE : type 8 -- Undefined variable: print -- at line 10
E_ERROR : type 1 -- Function name must be a string -- at line 10

任何人都能告诉我原因吗?

以下是代码:

<?php

   $print = function($key, $val){
      return 'The key: ' . $key . ', and value: ' . $val . '<br />';
   };

   $output = function($datas, $done_action){
      foreach($datas as $key => $val){
        echo $print($key, $val);
      }

      $done_action();
   };

   $elem1 = array('Name' => 'Aldi', 'Phone' => '087770958005', 'Address' => 'Bogor');
   $output($elem1, function(){
      echo '<br />Foreach function was ended!';
   });

?>

1 个答案:

答案 0 :(得分:2)

您需要提供use关键字才能在闭包内使用外部变量。你的代码应该是:

<?php

$print = function($key, $val){
  return 'The key: ' . $key . ', and value: ' . $val . '<br />';
};

$output = function($datas, $done_action) use ($print) {
  foreach($datas as $key => $val){
    echo $print($key, $val);
  }

  $done_action();
};

$elem1 = array('Name' => 'Aldi', 'Phone' => '087770958005', 'Address' => 'Bogor');
$output($elem1, function(){
  echo '<br />Foreach function was ended!';
});

在我的php-5.3.10上运行没有错误。