Вопрос №4478 от пользователя Александр О. в уроке «Функции первого класса. Возврат как значения», курс «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)?

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

1 0

Kirill Mokevnin

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

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
7 июля 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
7 июля 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
7 июля 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
7 июля 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
7 июля 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
7 июля 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
7 июля 5 месяцев