方法 1:使用 use
关键字按引用传递(最直接的方法)
这是最常用和最直接的方法。通过在使用 use
时在变量前加上 &
符号,你可以按引用传递变量。这意味着闭包内外的变量指向同一个内存地址,在闭包内修改它,外部的值也会同步改变。php复制下载
$externalValue = 10;
$anotherVariable = "Hello";
$myClosure = function() use (&$externalValue, $anotherVariable) {
// 修改按引用传递的变量
$externalValue += 50; // 这会影响外部的 $externalValue
// 这是按值传递的,修改它不会影响外部的 $anotherVariable
$anotherVariable .= " World";
echo "Inside closure: externalValue = $externalValue, anotherVariable = $anotherVariable\n";
};
$myClosure(); // 输出:Inside closure: externalValue = 60, anotherVariable = Hello World
echo "Outside: externalValue = $externalValue\n"; // 输出:Outside: externalValue = 60
echo "Outside: anotherVariable = $anotherVariable\n"; // 输出:Outside: anotherVariable = Hello
关键点:
use (&$variable)
:按引用传递,内部修改影响外部。use ($variable)
:按值传递(默认),内部修改不影响外部。闭包使用的是它创建时该变量的一个副本。