PHP-閉包-匿名函式
阿新 • • 發佈:2019-01-30
下面的兩個例子是直接在外層函式中執行閉包。
//直接使用use傳值並不會改變外層函式中變數的值! //即使使用static也不會有變化,可見閉包傳參是開闢了另外的空間。 function getMoney() { $rmb = 1; $func = function() use ( $rmb ) { echo '傳遞到閉包函式的原始的值:'.$rmb.'<br>';//$rmb = 1 $rmb++; echo '在閉包內操作後的值:'.$rmb.'<br>';//$rmb = 2 }; $func();//此處直接執行閉包函式 echo '外層函式中的值(此處的值不會因為閉包函式改變):'.$rmb.'<br>';//$rmb = 1 } //傳值的時候使用'&'傳地址時,會改變值! function getMoney() { $rmb = 1; $func = function() use ( &$rmb ) { echo '傳遞到閉包函式的原始的值:'.$rmb.'<br>';//$rmb = 1 $rmb++; echo '在閉包內操作後的值:'.$rmb.'<br>';//$rmb = 2 }; $func();//此處直接執行閉包函式 echo '外層函式中的值(此處的值不會因為閉包函式改變):'.$rmb.'<br>';//$rmb = 2 } getMoney();
下面例子是將閉包函式做為返回值 return.
//將閉包作為返回值返回。閉包函式本身也可以傳參 $name,在函式呼叫是傳實參。 function getMoneyFunc() { $rmb = 1; $func = function($name) use ( &$rmb ) { echo $name.'<br>'; $rmb++ echo $rmb.'<br>'; }; return $func; } $getMoney = getMoneyFunc(); $getMoney('name'); //輸出: name 2 $getMoney('test'); //輸出: test 3