Comments 18
Спасибо за информацию
Или еще лучше, ковырять уже написанный код этими людьми. Так как знать это все и уметь применять, две большие разницы.
Реальность она примерно такая:
Ответ про замыкания не совсем точный. В php есть несколько вещей, которые называются этим словом: собственно анонимные функции, которые передаются в виде параметров куда-либо, внезапно, use-переменные анонимных функций, а также объекты Closure
которые называются этим словом: собственно анонимные функции, которые передаются в виде параметров куда-либо, внезапно, use-переменные анонимных функций
не совсем понятно, куда вы отнесли слово
внезапно
к первому или второму пункту?
Это анонимная функция которая реализует класс Closure, может использоваться как с use так и без него. Собственно это не несколько вещей, это одна вещь.
"анонимные функции" это и есть объекты класса Closure
$example = function () {
...
};
и вот это:
$example = function () use ($var) {
...
};
… одно и тоже. Вот только первое — анонимка, а второе — замыкание.
А Closure — это класс, который и создает экзепляры анонимок.
Вообщем, тема холиварная, я удаляюсь =)
Вы можете называть замыкание анонимной функцией, но вы не можете назвать анонимную функцию замыканием. Ну разве только вы это не делаете в php.
Источник знаний по этой теме — официальная документация. И что мы там видим — это одно и тоже. И прикол этого в корне создание такого функционала php, как анонимки. В то время народ требовал их введение, так как перлись от возможности JS. А вот разработчики php не понимали, зачем не функциональному языку эта возможность. И сделали они анонимки, внешне похожие на общепринятый синтаксис, но не так, как оно должно работать. А когда ошибка вскрылась, было уже поздно. Это к 8й версии начались подвиги к исправлению. Но результат имеем такой — документация говорит что анонимки и замыкание это одно и тоже.
Блин, у меня где то в БЗ была сборка из раскрытия всех понятий анонимок, лямбд и замыканий. Не могу в этой горе доков уже найти, как так не трогал эту тему уже года 4ре.
Ну вообщем, вы знаете что в php синтаксис объявления итерации массивов через foreach() работает не так как в других языках?))) Ну вот с анонимками у него тоже самое...
Собеседование php-developer (вопросы и ответы)