標籤:閉包函數 匿名函數 use
/* * 匿名函數 * 閉包函數(closures) * 依靠匿名函數實現閉包 * 子函數可以使用父函數中的局部變數,這種行為就叫做閉包 * 串連閉包和外界變數的關鍵字 use * 閉包的兩個特點 * 1.作為一個函數變數的一個引用,當函數返回時,其處於啟用狀態。 * 2.一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。 * 閉包函數返回時,該函數內部變數處於啟用狀態,函數在棧區依然保留。 * * 總結 * 1.閉包外層是個函數 * 2.閉包內部都有函數 * 3.閉包會return內建函式 * 4.閉包返回的函數內部不能有return(不然就真的結束了) * 5.執行閉包後,閉包內部變數會存在,而閉包內建函式的內部變數不會存在。 * * 閉包的應用情境 * 1.保護函數內的變數安全,外層函數中變數只有內建函式才能訪問,而無法通過其他途徑訪問到,因此保護了外層函數中變數的安全性。 * 2.在記憶體中維持一個變數。閉包,返回內建函式,用到了外層函數中的變數,所以外層函數中的變數一直存在於記憶體中。因此每次執行,都會使用到。 * */ $var = function ($a,$b){ echo ‘我是匿名函數<br/>‘; return $a+$b; };//匿名函數一定要加分號 echo $var(1,2);var_dump($var);//object(Closure)[1] 對象 內建類Closure的一個執行個體 即對象function one(){ echo ‘1<br/>‘; function two(){ echo ‘2<br/>‘; } function three(){ echo ‘3<br/>‘; } two();}one();function demo(){ $a = 10; $b = 20; $one = function ($param) use (&$a,$b) {//用use使用外部變數$a,$b 利用&引用 改變$a的值 echo $param."<br/>" ; $a++; echo $a."<br/>"; echo $b."<br/>"; }; // $one(‘hello world‘); // echo $a; return $one;}$var = demo();$var (‘yangsir‘);//$a變數沒有被釋放 11$var (‘wangsir‘);//$a變數沒有被釋放 12function test($fun){ echo $fun();}test(function(){ return ‘我是匿名函數進行傳參數‘;});
本文出自 “津沙港灣” 部落格,請務必保留此出處http://11410485.blog.51cto.com/11400485/1840249
PHP 閉包函數 Closures 匿名函數