2014-09-11 112 views
0

內我做了一個實驗,試圖調用匿名函數中的匿名函數,但它不工作,並得到了一些錯誤:分配匿名函數分配匿名函數

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

匿名函數來自php 5.3,請檢查您的php版本。 – xdazz 2014-09-11 03:52:49

+0

@xdazz我的PHP版本已經支持 – 2014-09-11 04:02:37

回答

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上運行沒有錯誤。

+0

哇謝謝。有用! – 2014-09-11 04:30:58