2014-07-21 124 views
1

PHP版本:5.4PHP調用匿名函數內部匿名函數

function foo(callable $succCallback) { 

     $isCallable = is_callable($succCallback); 
     echo "is callable outer ".is_callable($succCallback); 
     $success = function($fileInfo) { 
      echo "<br>is callable inner".is_callable($succCallback); 
     }; 
     $this->calllll($success); 
} 
function calllll(callable $foo) { 
    $foo("hello"); 
} 

我定義這樣的

功能,輸出爲

is callable outer 1 
is callable inner 

我如何可以參照$succCallback$success的身體。

回答

5

您必須使用use構造。它允許從父範圍繼承變量:

function foo(callable $succCallback) { 

     $isCallable = is_callable($succCallback); 
     echo "is callable outer ".is_callable($succCallback); 
     $success = function($fileInfo) use($succCallback) { 
      echo "<br>is callable inner".is_callable($succCallback); 
     }; 
     $this->calllll($success); 
} 
2
$success = function ($fileInfo) use ($succCallback) { 
    echo "<br>is callable inner" . is_callable($succCallback); 
}; 

要包括從匿名函數內周邊範圍的變量,你需要使用use()明確擴大其範圍。

2

從父範圍內使用變量,使用use

$success = function($fileInfo) use ($succCallback) { 
     echo "<br>is callable inner".is_callable($succCallback); 
    };