首页 > 解决方案 > 如何在php中的另一个函数中调用箭头函数

问题描述

我如何在 php 或类似的语法中使用箭头或匿名函数来实现这一点。

class calculator{
  // $sum = fn(...$args) => array_sum($args);
  public function hello(){
     // $sum(5, 10)
  }
}

or this way

$sum = fn(...$args) => array_sum($args);
class calculator{
  public function hello(){
     // $sum(5, 10)
  }
}

标签: php

解决方案


PHP 中的箭头函数不是一种特殊的函数,它只是一种用于声明“匿名函数”或“闭包”的便捷语法——也就是说,一个可以作为普通变量传递的函数。

因此,一旦您创建了匿名函数 $sum,它就像任何其他变量一样 - 您必须将该变量传递到您需要它的地方。通常,这样做是为了您可以通过传入不同的函数来更改调用哪个函数——例如,考虑注册一个错误处理程序。

你的第一个例子不是合法的 PHP,因为你不能在这样的类中声明一个浮动的变量。你的第二个例子是有效的语法,但变量 $sum 没有被传递到函数中,所以那里不存在。一个工作(但不是很有用)的例子是这样的:

$sum = fn(...$args) => array_sum($args);
class calculator{
  public function hello(callable $functionToCall){
     echo $functionToCall(5, 10);
  }
}
$calc = new calculator();
$calc->hello($sum);

如果您正在寻找的只是向类添加 sum 方法,则根本不需要箭头语法:

class calculator{
  public function sum(...$args) {
     return array_sum($args);
  }
}

类似地,如果你想要的只是一个名为 sum 的函数,可以在任何地方使用,只需将其声明为普通函数,而不是闭包:

function sum(...$args) {
    return array_sum($args);
}
class calculator {
    public function hello() {
       echo sum(5, 10);
   }
}

推荐阅读