1. 程式人生 > >PHP-閉包-匿名函式

PHP-閉包-匿名函式

下面的兩個例子是直接在外層函式中執行閉包。

//直接使用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