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






