摘要:閉包與函數(shù)真正的區(qū)別函數(shù)封裝一次多處調(diào)用。閉包只限于本方法使用,耦合度低到忽略。
看過許多關(guān)于PHP中閉包的講解,每個(gè)文檔想要表達(dá)的意思大體相同,但是理解起來很費(fèi)勁,我根據(jù)自身理解加以描述,有更好的理解請指出
眾所周知,大家都知道PHP的閉包是function () use (){};
本文分為3步
1:講解閉包的使用
2:閉包實(shí)例
3:閉包總結(jié)
1、講解閉包的使用
1:閉包中的use使用-上篇
function () use($param){};
$param = 1; $data = function () use ($param) { var_dump($param); }; $data(); $param = 2; $data(); // 輸出結(jié)果為 1 1
分析結(jié)果:use的用法相當(dāng)于對象(類的用法),$data(),表示實(shí)例化一次,然而語言有著文本流的特性,第二次$data()沒有重新實(shí)例,實(shí)例的時(shí)候取到的值是1,所以輸出結(jié)果為上面結(jié)果;
2:閉包中的use使用-下篇
$param = 1; $data = function () use ($param) { var_dump($param); }; $data(); $param = 2; $data = function () use ($param) { var_dump($param); }; $data(); // 輸出結(jié)果為 1 2
分析結(jié)果:文本流的形式,又實(shí)例化一次變量所以存儲變量為2,最終輸出為2;
3:閉包中function()后面的括號,use前面的括號用法
function ($obj) use($param){};
$param = 1; $data = function ($obj) use ($param) { var_dump($obj); var_dump($param); }; $data(2); $data(3); $param = 2; $data(4); // 輸出 2 1 3 1 4 1
分析結(jié)果:function后面的括號相當(dāng)于函數(shù)的用法,每次調(diào)用函數(shù)時(shí)傳入數(shù)據(jù)一樣,每次都需要傳入,后面的use表示實(shí)例一次后不變,所以obj隨時(shí)改變。
2、閉包實(shí)例
例子1:
$arr = [ "米" => ["咸粥", "甜粥", "米飯"], "面" => ["面條", "花卷", "饅頭"], ]; $param = ""; $bag = function ($data) use ($param) { $l = count($data); return $data[rand(0, $l-1)]; }; $eat_arr = []; foreach ($arr as $key => $value) { $each_arr[] = "吃".$key.":".$bag($value); } echo implode(",", $each_arr); // 輸出 吃米:米飯, 吃面:面條 吃米:甜粥, 吃面:饅頭
例子2:
$arr = [ "米" => ["咸粥", "甜粥", "米飯"], "面" => ["面條", "花卷", "饅頭"], ]; $eat_arr = []; foreach ($arr as $key => $value) { $bag = function () use ($value) { $l = count($value); return $value[rand(0, $l-1)]; }; $each_arr[] = "吃".$key.":".$bag(); } echo implode(",", $each_arr); // 輸出 吃米:甜粥, 吃面:面條 吃米:甜粥, 吃面:花卷
3、閉包總結(jié)
閉包總結(jié)到最后,就是與函數(shù)不同的地方就是多加了一個(gè)use中間值,使用的時(shí)候注意一點(diǎn)是function后面的()為可變變量,use()里面的變量為實(shí)例一次后不改動的變量,循環(huán)里面寫閉包這種方法不是很好用,相當(dāng)于每次都實(shí)例,所以閉包的寫法可以先定義一個(gè)方法在調(diào)用。
閉包與函數(shù)真正的區(qū)別:
函數(shù):封裝一次多處調(diào)用。 閉包:只限于本方法使用,耦合度低到忽略。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/31208.html
摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...
摘要:當(dāng)初看這個(gè)解釋有點(diǎn)懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時(shí)網(wǎng)上很多人說閉包是難點(diǎn),各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...
摘要:用匿名函數(shù)的好處在于,這個(gè)服務(wù)綁定到容器以后,并不會立即產(chǎn)生服務(wù)最終的對象,只有在這個(gè)服務(wù)解析的時(shí)候,匿名函數(shù)才會執(zhí)行,此時(shí)才會產(chǎn)生這個(gè)服務(wù)對應(yīng)的服務(wù)實(shí)例。 前言 ? 老實(shí)說,第一次老大讓我看laravel框架手冊的那天早上,我是很絕望的,因?yàn)檎娴臎]接觸過,對我這種渣渣來說,laravel的入門門檻確實(shí)有點(diǎn)高了,但還是得硬著頭皮看下去(雖然到現(xiàn)在我還有很多沒看懂,也沒用過)。? 后面慢...
摘要:原因如下短閉包的目的是為了減少冗余。然而,的創(chuàng)建者認(rèn)為,如果你要處理的是多行表達(dá)式的函數(shù),那么使用閉包獲得的益處就更少了。這意味著你可以改變短閉包內(nèi)的變量,但它不會對外部作用域中的變量產(chǎn)生影響。 showImg(https://segmentfault.com/img/remote/1460000019117465?w=722&h=350);短閉包,也叫做箭頭函數(shù),是一種用 php 編...
摘要:前言騰訊一面,相比阿里一面來說,騰訊一面先給打電話預(yù)定時(shí)間,這也給了我們這些面試者去準(zhǔn)備的時(shí)間。其實(shí)閉包也就是指有權(quán)訪問另一個(gè)函數(shù)作用域的函數(shù)而已。常用的創(chuàng)建閉包的方法就是在函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。 前言 騰訊一面,相比阿里一面來說,騰訊一面先給打電話預(yù)定時(shí)間,這也給了我們這些面試者去準(zhǔn)備的時(shí)間。但是也正是因?yàn)檫@種確定性,也有在等待電話的時(shí)候的心情的忐忑。 背景 我是一名大三學(xué)生,大一...
閱讀 3164·2019-08-30 15:55
閱讀 2945·2019-08-30 13:46
閱讀 1447·2019-08-29 17:29
閱讀 3514·2019-08-29 11:08
閱讀 3439·2019-08-29 11:04
閱讀 1088·2019-08-28 18:20
閱讀 545·2019-08-26 13:37
閱讀 1327·2019-08-26 11:49