php的闭包函数use的使用
生活随笔
收集整理的這篇文章主要介紹了
php的闭包函数use的使用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
PHP在默認(rèn)情況下,匿名函數(shù)不能調(diào)用所在代碼塊的上下文變量,而需要通過(guò)使用use關(guān)鍵字。
function?getMoney() { ??$rmb?= 1; ??$dollar?= 6; ??$func?= function() use?( $rmb?) { ????echo?$rmb; ????echo?$dollar; ??}; ??$func(); } ??? getMoney(); ??? //輸出: //1 //報(bào)錯(cuò),找不到dorllar變量 //可以看到,dollar沒(méi)有在use關(guān)鍵字中聲明,在這個(gè)匿名函數(shù)里也就不能獲取到它,所以開(kāi)發(fā)中要注意這個(gè)問(wèn)題。 //是否可以在匿名函數(shù)中改變上下文的變量,但我發(fā)現(xiàn)是不可以的 function?getMoney() { ??$rmb?= 1; ??$func?= function() use?( $rmb?) { ????echo?$rmb; ????//把$rmb的值加1 ????$rmb++; ??}; ??$func(); ??echo?$rmb; } ??? getMoney(); ??? //輸出: //1 //1 # 原來(lái)use所引用的也只不過(guò)是變量的一個(gè)副本而已。但是我想要完全引用變量,而不是復(fù)制。 # 要達(dá)到這種效果,其實(shí)在變量前加一個(gè) & 符號(hào)就可以了: function?getMoney() { ??$rmb?= 1; ??$func?= function() use?( &$rmb?) { ????echo?$rmb; ????//把$rmb的值加1 ????$rmb++; ??}; ??$func(); ??echo?$rmb; } ??? getMoney(); ??? //輸出: //1 //2 /** 好,這樣匿名函數(shù)就可以引用上下文的變量了。如果將匿名函數(shù)返回給外界,匿名函數(shù)會(huì)保存use所引用的變量,而外界則不能得到這些變量,這樣形成‘閉包'這個(gè)概念可能會(huì)更清晰一些。根據(jù)描述改變一下上面的例子: */ function?getMoneyFunc() { ??$rmb?= 1; ??$func?= function() use?( &$rmb?) { ????echo?$rmb; ????//把$rmb的值加1 ????$rmb++; ??}; ??return?$func; } ??? $getMoney?= getMoneyFunc(); $getMoney(); $getMoney(); $getMoney(); ??? //輸出: //1 //2 //3 ?
轉(zhuǎn)載于:https://www.cnblogs.com/jianzhaojing/p/11284659.html
總結(jié)
以上是生活随笔為你收集整理的php的闭包函数use的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小程序 navigator 无法跳转 t
- 下一篇: Introduction to Djan