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