Чи слід розробляти плагін, щоб згрупувати функції в Клас, щоб уникнути конфліктів у просторі імен?
Так, але це лише один із другорядних аргументів. Насправді це не «справжня» природа класу в OOAD .
Чи використання класів створює накладні витрати для PHP?
Ні, не особливо. Неправильний дизайн та / або поганий письмовий код або переддозріла оптимізація створюють набагато більше проблем із продуктивністю, ніж фактичні особливості мови.
Якщо є показник продуктивності, чи повинні замість них заздалегідь зафіксувати назви функцій?
Як написано, хіт виступу не існує. Неправильний письмовий код буде скоріше хітом для продуктивності, ніж хорошим письмовим кодом, який має ще кілька рядків коду, але не змушує вас робити погані справи.
Нижня лінія:
Ви можете по-різному використовувати класи для плагінів. Ви можете просто використовувати їх для створення якогось простору імен та використовувати їх "просто" для глобальних функцій. Найбільш прямою формою є статичні функції класів, на наступному прикладі коду показано обидві: спочатку глобальні функції, а потім глобальні статичні функції класу:
/* global function */
function myplug_hook()
{
}
add_filter('the_hook', 'myplug_hook');
/* global static function */
class myplug
{
public static function hook()
{
}
}
add_filter('the_hook', 'myplug::hook');
Це лише невеликий приклад, який показує, що вам потрібно набрати більше для одного гака. Додатково показано, як працює простір імен: Ви можете легше замінити ім'я одного класу, щоб перейменувати всі статичні функції, а потім шукати та замінювати, myplug::
що може бути складнішеmyplug_
через помилкові позитиви. Але в підсумку різниці не дуже.
Ключовим моментом є: функції статичного класу Документи насправді не багато, ніж глобальні функції Документи .
І цей приклад також показує: Простір імен нормально, але з текстовою адресою проміжок імен припиняється за допомогою гачків: Функція зворотного виклику жорстко кодується, отже, перевага в просторі імен за допомогою класу (одне місце для базового імені, імені класу) не відповідає допоможіть, коли ви втручаєтесь у свій код за допомогою wordpress для назв гака.
Реальна користь починається з використання фактичних екземплярів класу та нестатичних функцій. Це має ту перевагу, що ви можете почати використовувати принципи ОО і можете впорядкувати свій код. Функції статичного класу - це скоріше проблема, ніж інфакт рішення.
Тоді це більше, ніж просто синтаксичний цукор.
Ключовий момент: зробіть щось, що допоможе вам написати код, з яким ви легко можете працювати і підтримувати. Не завищуйте продуктивність, це звичайна помилка. Більш важливим є те, що ви пишете код, який легко читати і розуміти, він просто робить те, що вам потрібно. Можливо, це запитання та відповідь корисні для отримання більшої картини в цьому контексті: Кілька спеціальної довідки метабокса .
Один поширений підхід, який я маю навіть з меншими плагінами, - це використовувати статичну функцію помічника для інстанціювання плагіна, а решта знаходиться тоді в екземплярі плагіна. Це допомагає інкапсулювати основну логіку плагіна, і це вигідно від простору імен за допомогою гачків, а також, що приватні члени можуть бути повторно використані між гачками, що неможливо зі стандартними глобальними функціями. Наступний приклад коду показує шаблон:
<?php
/** Plugin Headers ... */
return MyPlugin::bootstrap();
class MyPlugin
{
/** @var MyPlugin */
static $instance;
static public function bootstrap() {
if (NULL === self::$instance) {
self::$instance = new __CLASS__;
}
return self::$instance;
}
# ...
}
Це звичайний зразок, який я використовую для базового файлу плагінів. Клас плагінів, з одного боку, представляє плагін для wordpress, а з іншого - дозволяє почати використовувати об'єктно-орієнтовані парадигми для власного коду, який навіть може бути повністю орієнтований на об'єкт (але не повинен бути). Це свого роду контролер, що взаємодіє з усім API Wordpress як запитом.
Як показує приклад, буде створений екземпляр плагіна. Це дозволяє використовувати відомі загальнодоступні файли, наприклад, Constructor Docs ( __construct
) для ініціалізації фактичного плагіна:
# ...
class MyPlugin
{
# ...
public function __construct()
{
add_filter('the_hook', array($this, 'hook'));
}
public function hook()
{
}
# ...
}
На момент реєстрації гака, цей об’єкт плагіна вже отримує користь від його дизайну: Ви перестали жорстко кодувати фактичну функцію гака проти конкретного імені класу плагіна . Це можливо через прив'язку класу до об'єкта об'єкта для зворотного виклику. Звучить складно, просто кажучи: $this
це плагін. Можна використовувати для зворотних зворотних викликів, порівняйте методи реєстрації класу як зворотні дзвінки .
Ця схема дозволяє простіше взаємодіяти з wordpress: введення зводиться до назв гачків та даних, які вони надають. Потім ви можете почати реалізовувати безпосередньо в цей клас плагінів або рефакторувати свою реалізацію проти нього, так що лише вводити код у клас плагінів, який є найменшим мінімумом, щоб визначити ваш інтерфейс плагінів проти wordpress, але зберігати загальну логіку в стороні від worddress. Ось тут починається веселощі, і, швидше за все, те, чого хоче досягти кожен автор плагінів у довгостроковій перспективі.
Тому не програмуйте за допомогою програми, а проти цього. Оскільки реферат є досить гнучким, немає загального або простого для опису інтерфейсу для програмування проти. Базовий клас плагінів може взяти на себе цю роль, дозволяючи вам більше гнучкості для власного коду, що призведе до більш легкого коду та кращої продуктивності.
Таким чином, для простору між іменами є більше користі. Найкраща пропозиція, яку я можу дати: Спробуйте самі. Ви не сильно розгубите, лише нові речі відкрийте для себе.
Ви, ймовірно, помітите відмінності після того, як пройдете кілька основних оновлень Wordpress, зберігаючи плагін сумісним.
Caveat : Якщо ваш плагін безпосередньо інтегрується з wordpress, щоб виконати роботу, використання однієї або двох загальнодоступних функцій може підійти вам краще. Візьміть правильний інструмент для роботи.