wordpress-plus-php

Анонимные PHP функции, также известные как замыкания (closures), позволяют создавать функции, не имеющие определенных имен. Они наиболее полезны в качестве значений callback-параметров, но также могут иметь и множество других применений. Появились в PHP они начиная с версии 5.3, немного доработаны в 5.4

Получается, что появились они давно, а если заглянуть в код WordPress плагинов, то там их практически нет. Попробуем разобраться почему так. Например, в том же javascript, они используются повсюду.

Как следует из определения, анонимные PHP функции наиболее применимы в качестве функций обратного вызова (callback), а в WordPress это особенно применимо к хукам (фильтрам и экшенам).

WordPress хук может быть применен 2-мя способами:

  1. используя имя callback функции и соответствующую функцию:
  2. используя анонимную функцию (замыкание):

Рассмотрим, есть ли разница в этих двух способах, и плюсы и недостатки каждого из них, применимо к WordPress.

У первого способа фактически одно преимущество: так как функция имеет имя, ее при необходимости можно удалить, используя WP-функцию remove_filter() или remove_action() что дает определенную гибкость, для тех, кто будет пользоваться вашим кодом. Поэтому в плагинах и темах, которые скачаны с wordpress.org анонимные функции редкие гости — ради гибкости использования конечными пользователями. Полезная информация о внесении изменений в поведение функций темы/плагина затронута в этой статье.

Преимущества использования анонимных функций в WP:

  • более короткий синтаксис
  • глобальное пространство имен в более чистом состоянии (не нужно переживать за конфликт имен функций)
  • не нужно придумывать названия для callback функций (иногда это отнимает немало времени)

Когда стоит применять анонимные функции в WordPress?

  • Ваш код не предназначен для широкого использования (в темах или плагинах, которые будут добавлены на сайт wordpress.org)
  • Возможность удаления callback функции не нужна
  • Не нужна поддержка PHP версий ниже 5.3

Вывод

Если вы пишете код для себя, если у вас версия PHP 5.4 и выше, возможность удаления callback не нужна — тогда применение анонимных функций вполне оправданно.

Примеры

Классическое применение:

Применение одной и той же функции к разным фильтрам (в этом случае применение замыканий не дает преимуществ):

Применение в плагине, с использованием ООП