为什么要使用匿名功能?

Sho*_*hoe 46 php closures design-patterns anonymous-function

可能重复:
你如何在PHP中使用匿名函数?

我为什么要使用匿名函数?我的意思是,使用它的真正优惠是什么?我真的不明白这一点.我的意思是,你使用函数使代码更干净或多次使用它.但匿名函数不是第一个也不是第二个.我用谷歌搜索了他们,我找不到有人问同样的问题.

And*_*rey 60

我会说,当有好的库类/函数使用它们时,匿名函数会显示它们的美感.他们自己并不那么性感.在.net的世界中,有一种称为LINQ的技术,以非常惯用的方式大量使用它.现在回到PHP.

第一个例子,排序:

uasort($array, function($a, $b) { return($a > $b); });
Run Code Online (Sandbox Code Playgroud)

您可以指定用于排序的复杂逻辑:

uasort($array, function($a, $b) { return($a->Age > $b->Age); });
Run Code Online (Sandbox Code Playgroud)

另一个例子:

$data = array( 
        array('id' => 1, 'name' => 'Bob', 'position' => 'Clerk'), 
        array('id' => 2, 'name' => 'Alan', 'position' => 'Manager'), 
        array('id' => 3, 'name' => 'James', 'position' => 'Director') 
); 

$names = array_map( 
        function($person) { return $person['name']; }, 
        $data 
);
Run Code Online (Sandbox Code Playgroud)

你看到你可以很好地生成一系列名称.

最后一个:

array_reduce(
   array_filter($array, function($val) { return $val % 2 == 0; },
   function($reduced, $value) { return $reduced*$value; }
)
Run Code Online (Sandbox Code Playgroud)

它计算偶数的乘积.

一些哲学.什么是功能?可以调用的功能单元和代码重用单元.有时您只需要第一部分:调用和执行操作的能力,但您根本不想重复使用它,甚至可以使其对代码的其他部分可见.这就是匿名函数的本质所在.

  • 固态代码示例+1 (4认同)
  • +1用于非平凡的使用和编写减少和过滤 (2认同)

net*_*der 21

它特别适用于回调:

array_walk($myArray, function($value, $key) {
   // do something
});
Run Code Online (Sandbox Code Playgroud)

  • @Andrey:如果你觉得我的答案不够有用,不要赞成它,并提供你认为更好的答案.故事结局. (11认同)
  • 怎么比"foreach"更好?这是毫无意义的例子.它显示了可以使用其他构造更容易完成的事情.它没有显示匿名函数的有用性.真. (3认同)
  • OP没有问什么更好.它询问它有什么用处.答案:**回调**.如果您想提供1000个示例,请随意在自己的答案中进行. (3认同)

Nik*_*kiC 7

您通常使用匿名函数来执行只需要一次的函数.这样你就不会污染函数命名空间,也不会发明奇怪的函数名array_walk_callback1.

  • 希望你永远不会发明那些奇怪的函数名称.像`returnUsefulDataFromArray`这样的东西会更有用:) (2认同)

Mch*_*chl 5

也许最明显的原因是使用回调.以usort()功能为例.引入单行函数毫无意义,只使用一次和一次.匿名函数(通常)更适合这项任务.