闭包(匿名函数) php
php中的閉包,之前不理解。以前項目中雖然有用到,也是別人怎么用,自己也跟著怎么用,也沒具體去看一下,時間長了就忘了,也不知道閉包是怎么回事。今天網上搜集了關于php閉包相關的文章,看了7,8篇,干貨不多,大都復制粘貼黨,現在根據自己的理解小結一下
閉包支持版本
根據官方文檔里說的closure是5.3.0之后才支持以及很多文章說php是5.3.0之后才引入的,也沒親自驗證過,暫時就理解為php版本大于5.3.0才有了閉包概念,支持閉包。
?
語法
函數:function func ($arg = xxx) {xxx};
匿名函數: 沒有函數名的函數 比如 function($arg = xxx){xxx};
閉包:匿名函數加上use用法 比如 function($arg = xxx)use ($a, $b) {xxx};
?
對比
函數:相關語句塊的集合,可以根據傳入的條件完成一個小功能。
匿名函數:雖然有了函數,但是函數起名字是一件較麻煩的事,且在同一命名空間下,函數命名有可能出現重復。一旦出現重復,程序就會報錯。所以有了匿名函數。
閉包:匿名函數的增加版,添加了use用法,申明時獲取上下文內容,而不是調用時才獲取。
?
閉包優點
網上說閉包有減少foreach,減少函數參數,減少遞歸等好處,感覺這些和閉包關系不大。個人認為,閉包帶來的最大好處在于use。
php中變量有引用一說(其他語言中也有類似的說法),use中的變量存放的可能是一個變量的值拷貝,也可能是一塊內存地址(類似于c語言中的指針)
use中變量存放引用(內存地址)比較好的例子計數器,簡易代碼如下
$start = 0;
$funcCount = function () use (&$start) {$start++; return $start;};
unset($start);
以上3行代碼就定義了一個簡單的計數器,變量start銷毀后,由于閉包中有對start的引用,所以start之前指向的內存地址不會被回收,此時這塊內存地址就脫離程序的掌控,通過$funcCount()可以訪問到這塊內存,執行計數操作并返回,該地址中的值修改常理來說只會被該匿名函數修改,不會被其他程序誤改。
?
暫時就說到這里,有不對的地方,歡迎批評指正,共同進步
轉載于:https://www.cnblogs.com/peter-yan/p/6763384.html
總結
以上是生活随笔為你收集整理的闭包(匿名函数) php的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: canvas手机端绘图解决方案
- 下一篇: thinkphp-权限控制