在Javascript中,我习惯于传递函数,因为它们是第一类值。但是,在PHP中我得到通知" 使用未定义的常量添加 - 假设'添加' ":
function fold($f, $acc) {
return function ($xs) use ($f, &$acc) {
return array_reduce($xs, $f, $acc);
};
}
function add($m, $n) {return $m + $n;};
fold(add, 0) ([1, 2, 3]);
我知道我可以分配一个lambda $add = function ($m, $n) {return $m + $n;}
,但我更喜欢简洁add
。从长远来看这是安全还是我注定了?
答案 0 :(得分:2)
PHP函数并不像那样“一流”。你实际上没有按名称传递函数,你只是传递一个未定义的常量and
。在这种情况下的行为是提出通知*,并回退到字符串值“和”;这是全局函数的有效标识符,因此代码运行成功(尽管有错误通知)。
将函数直接传递给fold()
的唯一方法是将其分配给变量,如您所说。否则,你只是传递一个全局函数的名称,虽然它可以正常工作,但它可能不是你想要实现的。
*只是一个快速的附录,请注意此通知将在PHP 7.2中变为警告