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