В Javascript я привык передавать функции, так как они являются значениями первого класса. Тем не менее, в PHP я получаю уведомлениеИспользование неопределенной константы add — предполагается «add»«:
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]);
Я знаю, что могу просто назначить лямбду $add = function ($m, $n) {return $m + $n;}
Я предпочитаю более сжатый add
хоть. Это безопасно или я обречен в долгосрочной перспективе?
Функции PHP не такие «первоклассные», как это. Вы на самом деле не передаете функцию по имени, вы просто передаете неопределенную константу, and
, Поведение в этой ситуации состоит в том, чтобы поднять уведомление * и вернуться к строковому значению «и»; это допустимый идентификатор вашей глобальной функции, и поэтому код выполняется успешно (хотя и с уведомлением об ошибке).
Единственный способ передать функцию непосредственно в fold()
это присвоить его переменной, как вы говорите. В противном случае вы просто передаете имя глобальной функции, и хотя это будет работать нормально, вероятно, это не совсем то, чего вы хотите достичь.
* Просто быстрое дополнение, чтобы заметить, что это уведомление изменится на предупреждение в PHP 7.2
Других решений пока нет …