99久久国产露脸精品麻豆,欧美日韩精品小说,亚洲免费在线美女视频,国产三级中文字幕,91极品国产情侣高潮对白,国产亚洲一区二区三区不卡片,欧美jizz精品欧美性,久久国产精品久久国产片

php閉包函數(一)

袁志蒙 3898次瀏覽

摘要:匿名函數(Anonymous functions),也叫閉包函數(closures),允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。當然,也有其它應用的情況。子函數可以使用父函數的局部變量,這種行為叫做閉包...

匿名函數(Anonymous functions),也叫閉包函數(closures),允許 臨時創建一個沒有指定名稱的函數。最經常用作回調函數(callback)參數的值。當然,也有其它應用的情況。

通俗的說:子函數可以使用父函數的局部變量,這種行為叫做閉包.

PHP版本要求:PHP5.3+


閉包是由匿名函數實現的,所以先聲明一個匿名函數:

// 匿名函數因為沒有名字,如果使用它,必須將其返回一個變量
$var = function ($value){
	echo $value;
};	//一定要加分號結束

$var('test');
// 運行結果: test

var_dump($var);
// $var它是Closure類的一個對象實例
// $var變量名后面有(),實際調用__invoke()方法

如果我們要使用這個匿名函數之外的變量,如以下代碼,我們要使用use語言結構:

function demo(){
	
	$a = 10;
	$b = 20;
	$var = function($value) use ($a, $b) {
		echo $value.' and '.$a.' and '.$b;
	};
	
	$var('hello');
}

demo();

//運行結果: hello and 10 and 20

在匿名函數中改變外部變量(父函數變量)的值:

function demo(){
	
	$a = 10;
	$b = 20;
	
	// use 引用的變量是 $a,$b 的副本,如果要完全引用,就要加上 & 符號。
	$var = function($value) use (&$a, &$b) {
		echo $value.' and '.$a.' and '.$b;
		$a ++;
		$b ++;
	};
	
	$var('hello');
	echo '<br>';
	echo $a.'<br>';
	echo $b.'<br>';
}

demo();
// 運行結果:
// hello and 10 and 20
// 11
// 21

將匿名函數返回,實現一個真正的閉包:

function demo(){
	
	$a = 10;
	
	// 將匿名函數返回
	return function($value) use (&$a) {
		echo $value.'<br>';
		$a ++;
		echo $a.'<br><br>';
	};

}
$var = demo();

// 閉包函數返回時,該函數的內部變量處于激活狀態,函數所在棧區依然保留
$var('hello');
$var('test');
$var('value');

// 運行結果:
// hello
// 11

// test
// 12

// value
// 13

閉包的應用場景:

1.保護函數內的變量安全,外層函數中變量只有內部函數才能訪問,無法通過其他途徑訪問到,因此保護了外層函數中變量的安全性。

2.在內存中維持一個變量,外層函數中的變量一直存在內存中,因此每次執行,都會使用到。


隨機內容

表情

共0條評論
  • 這篇文章還沒有收到評論,趕緊來搶沙發吧~