Как стать автором
Обновить

Комментарии 18

Спасибо за информацию

НЛО прилетело и опубликовало эту надпись здесь
Спасибо, поправил
Стоит еще повторить алгоритмы и структуры данных и прорешать хотя бы пару десятков задач на leetcode. Всё зависит от компании, конечно.
С задачами полностью согласен, но алгоритмы и структуры данных в реальных проектах на php встречаются ну очень редко, как правило все уже реализовано и работает быстрее чем самописное.
Ага, а потом тебя посадят на wordpress двигать кнопки.
Или еще лучше, ковырять уже написанный код этими людьми. Так как знать это все и уметь применять, две большие разницы.

Реальность она примерно такая:
image

Ответ про замыкания не совсем точный. В php есть несколько вещей, которые называются этим словом: собственно анонимные функции, которые передаются в виде параметров куда-либо, внезапно, use-переменные анонимных функций, а также объекты Closure

которые называются этим словом: собственно анонимные функции, которые передаются в виде параметров куда-либо, внезапно, use-переменные анонимных функций

не совсем понятно, куда вы отнесли слово
внезапно

к первому или второму пункту?

Разумеется, ко второму. К первому там и так достаточно всего написано

Все что вы перечислили в документации (https://www.php.net/manual/ru/functions.anonymous.php или www.php.net/manual/ru/class.closure.php) так и описывают.
Это анонимная функция которая реализует класс Closure, может использоваться как с use так и без него. Собственно это не несколько вещей, это одна вещь.

Обычная анонимная функция и Closure не совсем одно и то же ввиду определённой специфики работы. Сюда же можно было добавить __invoke-магию, но это уже из немного другой оперы. Однако, ключевое смешивание понятий не в этом, а в use-переменных

И о какой же специфике речь?

Хоть анонимная функция и является объектом Closure, ним может стать вообще любая callable-сущность через вызов Closure::fromCallable, включая вполне себе именованные методы, причём не обязательно публичные, если контекст позволяет

"анонимные функции" это и есть объекты класса Closure

Ответ вообще не правильный. Если чел говорит, что замыкание — это тоже, что и анонимная функция — в этом направлении разговор можно закрывать. Т.е., в ответе говорится, что:

$example = function () {
    ...
};


и вот это:

$example = function () use ($var) {
    ...
};


… одно и тоже. Вот только первое — анонимка, а второе — замыкание.

А Closure — это класс, который и создает экзепляры анонимок.

Вообщем, тема холиварная, я удаляюсь =)

Вы можете называть замыкание анонимной функцией, но вы не можете назвать анонимную функцию замыканием. Ну разве только вы это не делаете в php.


Источник знаний по этой теме — официальная документация. И что мы там видим — это одно и тоже. И прикол этого в корне создание такого функционала php, как анонимки. В то время народ требовал их введение, так как перлись от возможности JS. А вот разработчики php не понимали, зачем не функциональному языку эта возможность. И сделали они анонимки, внешне похожие на общепринятый синтаксис, но не так, как оно должно работать. А когда ошибка вскрылась, было уже поздно. Это к 8й версии начались подвиги к исправлению. Но результат имеем такой — документация говорит что анонимки и замыкание это одно и тоже.


Блин, у меня где то в БЗ была сборка из раскрытия всех понятий анонимок, лямбд и замыканий. Не могу в этой горе доков уже найти, как так не трогал эту тему уже года 4ре.


Ну вообщем, вы знаете что в php синтаксис объявления итерации массивов через foreach() работает не так как в других языках?))) Ну вот с анонимками у него тоже самое...

Круто… что же там такое, поделитесь вашей бз? Можно в личку.

Базу хочу, давай, делись
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации