PHP实现相同地址返回不同值:闭包技巧 - Baidu.com/1 示例
要实现这个需求,可以使用 PHP 的闭包(Closure)来保存每个地址对应的值。以下是完整的代码示例:
<?php
function generateHandler($initialValue)
{
return function () use (&$initialValue) {
return ++$initialValue;
};
}
$handler1 = generateHandler(0);
$handler2 = generateHandler(0);
$handler3 = generateHandler(0);
echo "baidu.com/1 返回:" . $handler1() . "\n";
echo "baidu.com/1 返回:" . $handler1() . "\n";
echo "baidu.com/1 再返回:" . $handler2() . "\n";
echo "baidu.com/1 再返回:" . $handler3() . "\n";
运行以上代码,会输出:
baidu.com/1 返回:1
baidu.com/1 返回:2
baidu.com/1 再返回:1
baidu.com/1 再返回:1
在上面的代码中,generateHandler 函数返回一个闭包。闭包内部通过引用传递 $initialValue 变量,使得每次调用闭包时都可以修改 $initialValue 的值。
每次调用 generateHandler 函数都会生成一个新的闭包,所以 $handler1、$handler2 和 $handler3 是独立的。调用 $handler1() 时,会返回 1,再次调用 $handler1() 时,$initialValue 的值已经变为 2,所以返回 2。
同样的道理,每次调用 $handler2() 和 $handler3() 都会返回独立的计数。
原文地址: https://www.cveoy.top/t/topic/pASi 著作权归作者所有。请勿转载和采集!