PHP: Построение абстракций
Функции первого класса и возврат как значения
Александр О.
Здравствуйте!
- Объясните логику, почему вместо кода:
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)?
- Можно ли вместо замыкания $func передавать его через параметры вызываемых функций? Почему в этом случае его не видят вложенные вызываемые функции?
Kirill Mokevnin
- Ваша функция не может работать, вы возвращаете не функцию, а результат вызова функции, причем передаете в функцию
$sum
два параметра, которые не определены. - Вы можете передавать функцию как параметр, но тогда придется это делать при каждом вызове, и делать это будут те кто используют ваш код, в таком случае пропадает все преимущество генерации.