摘要:修宇拉拉拉棟浩吼吼吼上線哲哈哈哈帥奇喵喵喵如上目的為在回調(diào)用使變量自增經(jīng)測除函數(shù)內(nèi)部變量只被一次其余類的屬性均無此作用域問題無該作用域問題想來原理很簡單這里用的是匿名回調(diào)函數(shù)回調(diào)函數(shù)的層級(jí)本就與方法應(yīng)相同只不過匿名閉包使回調(diào)函數(shù)
num = 0; //test3 } public function fun() { $arr = array( array("people" => "修宇","hobby" => "拉拉拉"), array("people" => "棟浩","hobby" => "吼吼吼"), array("people" => "上線哲","hobby" => "哈哈哈"), ); $people = "帥奇"; $hobby = "喵喵喵"; $num = 0; //test1 // $this->num = 0; //test2 $arr = array_map(function($v) use($people, $hobby){ $num++; //test1 // $this->num++; //test2345 $v["people"] = $people.$num; $v["hobby"] = $hobby.$num; //test1 // $v["people"] = $people.$this->num; // $v["hobby"] = $hobby.$this->num; //test2 or test3 or test4 or test5 or test6 return $v; },$arr); // return $arr; foreach($arr as $v) { $num++; $v["people"] = $people.$num; $v["hobby"] = $hobby.$num; } return $arr; } } $test = new Test(); var_dump($test->fun()); ?>
如上code 目的為在回調(diào)用使變量自增 , 經(jīng)測除fun函數(shù)內(nèi)部變量只被++一次 其余類的屬性均無此作用域問題 !
foreach 無該作用域問題 !
想來原理很簡單 這里array_map用的是匿名回調(diào)函數(shù) . 回調(diào)函數(shù)的層級(jí)本就與fun方法應(yīng)相同 , 只不過匿名閉包使回調(diào)函數(shù)寫在array_map中.
$num變量為fun函數(shù)內(nèi)部變量 , 其作用域再fun函數(shù)內(nèi). 綜上所述回調(diào)函數(shù)與fun函數(shù)同級(jí). 故$num并不作用在回調(diào)函數(shù)內(nèi). 故無法自增.
同理類的屬性作用域即在fun函數(shù)也在回調(diào)函數(shù) !
回調(diào)非匿名使用場景原理如下 :
num = 0; //test3 } public function callBack($v, $rV) { $this->num++; $v["people"] = $rV["people"].$this->num; $v["hobby"] = $rV["hobby"].$this->num; return $v; } public function fun() { $arr = array( array("people" => "修宇","hobby" => "拉拉拉"), array("people" => "棟浩","hobby" => "吼吼吼"), array("people" => "上線哲","hobby" => "哈哈哈"), ); $num = 0; //test1 $replace = array( array("people" => "帥奇", "hobby" => "喵喵喵"), array("people" => "帥奇", "hobby" => "喵喵喵"), array("people" => "帥奇", "hobby" => "喵喵喵"), ); $arr = array_map(array($this,"callBack"),$arr, $replace); return $arr; } } $test = new Test(); var_dump($test->fun()); ?>
上述array_map函數(shù)想傳計(jì)數(shù)器都不好傳 , 于是使用array_walk
array_walk 類的屬性
num = 0; //test3 } public function callBack($v, $k) { $this->num++; var_dump($this->num.":".$k."=>".$v); } public function fun() { $arr = array("people" => "修宇","hobby" => "拉拉拉"); array_walk($arr, array($this,"callBack")); } } $test = new Test(); $test->fun(); ?>
array_walk fun函數(shù)內(nèi)的局部變量 :
".$v); } public function fun() { $arr = array("people" => "修宇","hobby" => "拉拉拉"); $num = 0; array_walk($arr, array($this, "callBack"), $num); } } $test = new Test(); $test->fun(); ?>
由array_walk fun函數(shù)內(nèi)的局部變量情況 就引發(fā)array_walk、和array_map底層實(shí)現(xiàn)的探究
※很多帖子說array_walk與foreach一樣 , 這么看不一樣 . 使用時(shí)要注意 !
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28450.html
摘要:閉包閉包是什么閉包和匿名函數(shù)在中被引入。可以將匿名函數(shù)和閉包視作相同的概念。閉包和字符串或整數(shù)一樣,是一等值類型。何時(shí)使用我們通常把閉包當(dāng)做函數(shù)和方法的回調(diào)使用。 閉包 閉包是什么? 1).閉包和匿名函數(shù)在PHP5.3中被引入。2).閉包是指在創(chuàng)建時(shí)封裝函數(shù)周圍狀態(tài)的函數(shù),即使閉包所在的環(huán)境不存在了,閉包封裝的狀態(tài)依然存在,這一點(diǎn)和Javascript的閉包特性很相似。3).匿名函數(shù)就...
摘要:原因如下短閉包的目的是為了減少冗余。然而,的創(chuàng)建者認(rèn)為,如果你要處理的是多行表達(dá)式的函數(shù),那么使用閉包獲得的益處就更少了。這意味著你可以改變短閉包內(nèi)的變量,但它不會(huì)對(duì)外部作用域中的變量產(chǎn)生影響。 showImg(https://segmentfault.com/img/remote/1460000019117465?w=722&h=350);短閉包,也叫做箭頭函數(shù),是一種用 php 編...
摘要:類型與函數(shù)的概念函數(shù)這樣的一段代碼它只定義一次但是可能被執(zhí)行或調(diào)用多次類型是提供的引用類型之一通過類型創(chuàng)建對(duì)象在中函數(shù)也是對(duì)象的形式存在注意每個(gè)函數(shù)都是以個(gè)對(duì)象與函數(shù)函數(shù)聲明方式示例代碼一笑一人生字面量方式示例代碼一花一世界判斷函數(shù)是否為類 Function類型 Function與函數(shù)的概念 函數(shù)這樣的一段JavaScript代碼,它只定義一次,但是可能被執(zhí)行或調(diào)用多次 Functi...
摘要:前言我自己用此類回調(diào)函數(shù),來替代純粹是用為代碼的簡潔性,讓代碼更好看。我有點(diǎn)代碼小潔癖當(dāng)?shù)幚硪粋€(gè)一維索引數(shù)組時(shí),在回調(diào)函數(shù)內(nèi)是無法獲取到當(dāng)時(shí)元素索引的。目的在回調(diào)體內(nèi)獲取迭代關(guān)聯(lián)數(shù)組的下標(biāo)值。 前言:我自己用此類回調(diào)函數(shù),來替代 foreach 純粹是用為代碼的簡潔性,讓代碼更好看。(我有點(diǎn)代碼小潔癖~) 1、array_reduce 當(dāng)?shù)幚硪粋€(gè)一維索引數(shù)組時(shí),在回調(diào)函數(shù)內(nèi)是無...
摘要:中對(duì)多維數(shù)組特定列的提取,是個(gè)很常用的功能,正因?yàn)槿绱耍诎姹局螅砑恿艘粋€(gè)專用的函數(shù)。變種方法如下,意為把數(shù)組的每一項(xiàng)值的開頭值移出,并獲取移除的值作為新數(shù)組。注意此時(shí)新數(shù)組的鍵仍是原數(shù)組的鍵,如下。 PHP中對(duì)多維數(shù)組特定列的提取,是個(gè)很常用的功能,正因?yàn)槿绱耍琍HP在5.5.0版本之后,添加了一個(gè)專用的函數(shù)array_column()。當(dāng)然,如果你的PHP版本低于5.5.0,就...
閱讀 2008·2021-11-24 09:39
閱讀 1143·2021-09-10 11:25
閱讀 1769·2021-09-08 10:42
閱讀 3733·2021-09-06 15:00
閱讀 2498·2019-08-30 15:54
閱讀 3117·2019-08-29 17:08
閱讀 3272·2019-08-29 11:26
閱讀 2840·2019-08-28 18:27