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]
登錄后復制