繁体   English   中英

在PHP中使用匿名函数

[英]Use of Anonymous Functions in PHP

这个问题可能很愚蠢。 但是对我来说,匿名函数似乎并不真正匿名。 也许我理解它是错误的,但是匿名函数必须存储在某个变量中,因此稍后可以通过此变量引用它。 如果是这种情况,是什么使得下面的函数如此匿名或不同于常规函数(除了将函数本身存储在变量中的能力)? 或者换句话说,匿名函数比常规函数有什么用?

<?php
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

function greet($name)
{
     printf("Hello %s\r\n", $name);
}

$greet('World');
$greet('PHP');

greet('World');
greet('PHP');
?>

假设您要按用户名对用户列表进行排序。 您可以使用匿名函数,而不是定义仅使用一次的命名比较函数:

usort($users, function($a, $b) {
    return strcmp($a['username'], $b['username']);
});

函数本身没有名称,如您在示例中所示,您仍然可以使用“相同名称”创建“真实”函数。 它们通常被用作回调,这可能看起来更“匿名”:

foo(function ($bar) { ... });

关于匿名(或lambda,如果你愿意)函数的一个有用的事情是,它们允许创建与需要它的代码内联的回调函数,而不是设置仅在该一个上下文中使用的全局函数。 例如:

$foo = native_function($bar, callback_function);

可以改为:

$foo = native_function($bar, function() { return $bar + 1; } );

关于匿名函数的另一件方便的事是,您将其设置为每次都调用该函数的变量,因此它不存储值,而是派生它。 如果变量代表某个派生值,那就太好了。 例:

$tax = .1;
$total = function() use (&$price, &$tax) { return $price * (1 + $tax); };
$price = 5.00;

echo $total();  // prints 5.50

$price = $price + 1;

echo $total(); // prints 6.60

$discount = $total() - 2;

echo $discount; // prints 4.60;

您不必每次都调用像get_total这样的函数并传递$price ,而是与一个始终设置为最新值的变量进行交互,因为它每次使用lambda函数派生该值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM