php - 如何在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 中的箭头函数不是一种特殊的函数,它只是一种用于声明“匿名函数”或“闭包”的便捷语法——也就是说,一个可以作为普通变量传递的函数。
因此,一旦您创建了匿名函数 $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);
}
}
推荐阅读
- google-cloud-platform - 在 GCP 控制台中创建磁盘显示加载失败
- google-chrome - google chrome devtools 元素/属性的问题
- ios - 当我尝试运行我的项目时,我收到此错误“Command PrecompileSwiftBridgingHeader failed with a nonzero exit code”
- python - 如何pytest装饰器分配给多个功能
- javascript - 当用户在图片上向右或向左滑动时执行一个或其他功能 - RxJS
- c# - 创建共享链接 MS Graph BadRequest
- polyline - Edge data from generated polyline in Meshlab
- azure - Whitesource Bolt 无法生成报告
- xml - 为什么从 XSD 到 XML 样本到 XSD 样本的往返失败?
- typescript - 扩展客户端缺少功能