php中的閉包函數(shù)是嵌套在另一個(gè)函數(shù)中的匿名函數(shù),可以訪(fǎng)問(wèn)外部函數(shù)的變量。使用use關(guān)鍵字可以在閉包函數(shù)中訪(fǎng)問(wèn)外部變量,可以在實(shí)戰(zhàn)中應(yīng)用于需要對(duì)列表中的每個(gè)元素應(yīng)用折扣的場(chǎng)景。
PHP 函數(shù)中的閉包函數(shù)
閉包函數(shù)是嵌套在另一個(gè)函數(shù)中的匿名函數(shù),它可以訪(fǎng)問(wèn)外部函數(shù)的變量,即使外部函數(shù)已經(jīng)返回。閉包函數(shù)在 PHP 中非常有用,因?yàn)樗试S創(chuàng)建可重復(fù)使用的代碼塊并保持對(duì)外部環(huán)境的訪(fǎng)問(wèn)。
創(chuàng)建閉包函數(shù)
要用 PHP 創(chuàng)建閉包函數(shù),請(qǐng)使用 function
關(guān)鍵字,后跟一個(gè)可選的名稱(chēng)和參數(shù)列表:
$closure = function($arg1, $arg2) { // 函數(shù)體 };
登錄后復(fù)制
閉包函數(shù)中的變量范圍規(guī)則如下:
閉包函數(shù)可以訪(fǎng)問(wèn)在其定義位置作用域中聲明的所有變量,包括局部變量和參數(shù)。閉包函數(shù)不能訪(fǎng)問(wèn)它嵌套在其中的函數(shù)之外聲明的變量,除非這些變量在閉包函數(shù)中被顯式地聲明為 use
。
使用 use
關(guān)鍵字
use
關(guān)鍵字用于將外部變量引入閉包函數(shù)中。例如:
function outerFunction($arg1) { $outerVar = '外部變量'; $closure = function() use ($arg1, $outerVar) { // 閉包函數(shù)可以訪(fǎng)問(wèn) $arg1 和 $outerVar }; }
登錄后復(fù)制
實(shí)戰(zhàn)案例
假設(shè)您需要?jiǎng)?chuàng)建一個(gè)函數(shù)來(lái)對(duì)列表中的每個(gè)元素應(yīng)用折扣。為此,您可以創(chuàng)建一個(gè)閉包函數(shù)來(lái)計(jì)算折扣金額:
function applyDiscount($list, $discountPercentage) { // 創(chuàng)建閉包函數(shù)來(lái)計(jì)算折扣 $discountClosure = function($item) use ($discountPercentage) { return $item - ($item * ($discountPercentage / 100)); }; // 將折扣閉包函數(shù)應(yīng)用于列表中的每個(gè)元素 return array_map($discountClosure, $list); }
登錄后復(fù)制
完整代碼:
function outerFunction($arg1) { $outerVar = '外部變量'; $closure = function() use ($arg1, $outerVar) { // 閉包函數(shù)可以訪(fǎng)問(wèn) $arg1 和 $outerVar echo "arg1: $arg1<br>"; echo "outerVar: $outerVar<br>"; }; // 調(diào)用閉包函數(shù) $closure(); } applyDiscount([10, 20, 30], 10); // [9, 18, 27]
登錄后復(fù)制