php的閉包函式和js的閉包是一樣的道理,都是函式內部的函式,同樣的閉包會儲存函式內的變數,以方便下次的使用。但是也會有執行次數越多,占用記憶體越多,造成記憶體洩漏的現象。
接下來我們舉個例子來說明一下php的閉包,**如下:
例1:
首先我們大家看看,這裡呼叫函式之後,會echo出來什麼值呢,答案是10。function
getfunc
(); }
print_r($array);
return
$array;
}$funcarray = getfunc();
echo
$funcarray[0]();
我來解釋一下原因:
1️⃣ 在函式內部,定義了乙個陣列,然後經過了乙個for迴圈之後,陣列中的值變成了乙個長度為9的閉包函式物件的陣列,列印出來是這樣的
2️⃣ 然後我們定義的函式就把這個閉包函式陣列返回了出來,用變數接收了返回值之後,進行呼叫了陣列中的第乙個陣列,得出的結果自然就是陣列中函式的返回值,也就是return出來的值。
這樣一解釋,加上輸出的,是不是就好理解很多了。
細心的小夥伴一定發現這個例子與上個例子的不同了吧,哈哈,沒錯就是內部函式後面的那個use()那裡,還有內部函式的返回值不一樣了,所以大家猜這個函式最後的輸出結果會是多少呢,噠噠噠,我猜是19,你們呢?function
getfun
(); }
print_r($array1);
return
$array1;
}$funcarray1 = getfun();
echo
$funcarray1[9]();
列印出來看看啊,哈哈~
哈哈,果然是19,解釋一下原因:
1️⃣ 相信小夥伴們已經看到上圖中的那一坨了,加了use之後,相當於使用了外部變數,然後使得函式返回出來的函式變成了具有靜態鍵值的陣列,並且這些鍵值儲存了i所變化的值
2️⃣ 所以當我們在外部再次呼叫這個函式的時候,這些值還儲存在函式內部,因此我們**中呼叫了陣列中第九個函式,內部函式的返回值就會加上對應儲存的9,最終返回19。
呼呼,閉包的這兩個例子,小伙們要好好看看哦,理解投了,就會覺得其實php的閉包跟js的大同小異,ok,今天晚上就寫到這裡,大家晚安~~~
PHP 閉包函式
php v5.3閉包函式,閉包函式沒有函式名稱,直接在function 傳入變數即可 使用時將定義的變數當作函式來處理 匿名函式也叫閉包函式 closures允許建立乙個沒有指定沒成的函式,最經常用作 函式引數的值。閉包函式沒有函式名稱,直接在function 傳入變數即可 使用時將定義的變數當作函...
php的閉包函式bingto php的閉包函式
toc 1 閉包 匿名 函式的意義 閉包 匿名 函式通常作為簡單函式功能的實現。閉包 匿名 函式可以 賦值給變數 或者 作為引數使用 閉包 匿名 函式是 函式程式設計 的基礎 2 閉包 匿名 函式的使用 2 1 匿名函式賦值給變數 greet function name printf hello s...
php匿名函式和閉包
在談閉包之前,先說一下匿名函式,匿名函式實際上相當於把函式當做變數,不需要專門去定義乙個函式。在匿名函式出現之前,如果想把函式當做變數傳遞,得用字串的形式,如下 anonymous function function normal function testanonymous func testan...