Анонімні PHP функції, також відомі як замикання (closures) або лямбда-функції, дозволяють створювати функції не мають певних імен. У WP вони найбільш зручні в якості значень callback-функцій в хуках (фільтрах і події). З'явилися в PHP вони починаючи з версії 5.3, трохи доопрацьовані в 5.4.
Для початку давайте подивимося, як виглядає хук зі звичайною функцією і замиканням:
У першого способу фактично одна перевага: так як функція має ім'я, хук при необхідності можна видалити, використовуючи функцію remove_filter () або remove_action (). Це тим, хто буде користуватися вашим кодом. Тому в плагінах і темах анонімні функції рідкісні гості. А ось якщо хук створений за допомогою замикання, то видалити його вже ніяк не можна.
Переваги анонімних функцій в WP
Короткий синтаксис (зручніше писати).
Більш чисте глобальний простір імен і не потрібно переживати за конфлікти імен функцій.
Недоліки анонімних функцій в WP
Неможливо видалити хук, створений на базі анонімної функцій.
Неможливо використовувати одну й ту ж саму функцію в декількох хуках - для кожного потрібно писати окрему анонімну функцію. приклад:
Втім, цей недолік неоднозначний, тому що в PHP (з версії 5.3) як і в JS анонімну функцію можна помістити в змінну і потім використовувати змінну як коллбек-функції хука:
Але такий підхід є логічним, дуже і дуже рідко, майже ніколи. Він може бути застосований, наприклад, в окремому файлі шаблону теми, коли скрипт вже закінчує свою роботу і очевидно що такі хукі не заважатимуть будь-якого іншого коду. Або, коли вони спрацьовують тільки при якому-небудь рідкому умови - в окремій гілці логіки коду. Загалом, не пам'ятаю, коли мені таке було потрібно.
use в анонімних функціях
Ще одна фішка лямбда-функцій - це використання змінних з поточної області видимості, за допомогою оператора use:
Змінні передаються як значення, але можна передати і посилання на змінну, вказавши :
Коли варто застосовувати анонімні функції в WordPress?
Якщо код не призначений для широкого використання.
Можливість видалення callback функції не потрібна і не буде потрібна.
Чи не потрібна підтримка PHP версій нижче 5.3.
Тепер, трохи розібравшись що до чого, можна відповісти на питання, - «Чому в WP не використовуються анонімні функції?» - Тому що код WP повинен бути максимально гнучким, а замикання якраз не про це.
Creative sites for creative people ★ Digital marketing