PHP: Построение абстракций

Функции первого класса и возврат как значения

Александр О.

Здравствуйте!

  1. Объясните логику, почему вместо кода:
function sumGenerator ($func) { return function($a, $b) use ($func) { return sum($a, $b, $func); }; }

нельзя использовать следующий код (без обёртывания, а сразу вызвать нужную функцию sum):

function sumGenerator2 ($func) { return sum($a, $b, $func); }

Обёртывание здесь для возможности вызова лямбда-функции $sumIntegers именно с двумя параметрами, а не тремя (без $func)?

  1. Можно ли вместо замыкания $func передавать его через параметры вызываемых функций? Почему в этом случае его не видят вложенные вызываемые функции?

Kirill Mokevnin

  1. Ваша функция не может работать, вы возвращаете не функцию, а результат вызова функции, причем передаете в функцию $sum два параметра, которые не определены.
  2. Вы можете передавать функцию как параметр, но тогда придется это делать при каждом вызове, и делать это будут те кто используют ваш код, в таком случае пропадает все преимущество генерации.