Навіщо автозавантаження в WordPress, частина 1
Одна з найпростіших речей, яку ми можемо зробити під час роботи над плагінами WordPress, — це відкинути оператори require_once або include_once в нашому коді.
А чому ні? Це простий спосіб додати всі необхідні файли або залежності для даного класу, щоб його було легко читати, і вам не потрібно було турбуватися про створення величезних файлів коду. Тобто це допомагає нам спростити те, що ми пишемо, щоб ми могли змусити наші класи [в основному або в ідеалі] робити те, що вони роблять добре.
Якщо ви читали цей сайт протягом минулого року або близько того, ви знаєте, що я прихильник автозавантаження, і я думаю, що кожен, хто працює з PHP – незалежно від того, використовуєте ви WordPress чи іншу платформу – повинен використовувати.
Але це викликає два запитання, особливо якщо ви тільки починаєте:
- Навіщо турбуватися про автозавантаження, якщо є інші способи обробки залежностей завантаження?
- Як автозавантаження порівнюється зі скомпільованими мовами?
Тому я подумав, що варто відповісти на це в наступних кількох публікаціях.
Коротко про це:
- require_once і include_once можуть призвести до коду, який важко налагодити,
- важко відстежити код.
Але як так?
1 Налагоджувати важко
Під час написання коду, якщо щось є впевненим, це те, що буде щось, що не працюватиме, як задумано. Це в природі того, що ми робимо, чи не так?
Отже, коли настає час налагоджувати код, ми всі маємо свої стратегії.
- деякі з нас використовують echo або var_dump для відстеження коду,
- використовувати плагін у WordPress,
- інші використовують налагоджувач.
Хоча ця публікація не про те, як налагодити, це той факт, що ми повинні налагодити. Отже, якщо ми знаємо, що нам доведеться це зробити, чи не варто нам максимально полегшити собі це?
PHP — це динамічно типізована мова, тому, загалом, є багато речей, про які ми дбаємо під час написання коду. Тобто певні речі виводяться або примусово виводяться під час кожного запуску коду.
Наприклад, припустімо, що ви працюєте з рядком і порівнюєте його з числом. Інтерпретатор зробить усе можливе, щоб здогадатися, що саме ви робите (чи хочете ви розібрати рядок до цілого чи навпаки?), а потім працюватиме з цим.
Робота лише зі змінними може бути вправою в точності, тому що ми хочемо, щоб наш код читався так, як ми маємо намір. Навіщо залишати перекладачу здогадуватися, що саме ми маємо на увазі? І якщо перекладачеві доводиться виконувати додаткову роботу, то люди, звичайно, роблять це.
З цією метою, якщо ми знаємо, що помилки будуть представлені, і ми знаємо, що є способи написати чистіший код, чому б нам не зробити це?
2 Відстежити складно (чи, можливо, важче?)
Але це все ще не є причиною того, чому ми повинні покладатися на щось на зразок автозавантажувача, а не на вбудовані засоби мови, чи не так?
Подумайте про це: припустімо, що ви переглядаєте файл, намагаючись знайти помилку, і натрапляєте на функцію, яка містить певний код, використовує include_once, а потім використовує інший код.
Це означає, що ви повинні прочитати код, зберегти його в пам’яті, перейти до іншого файлу, зрозуміти цей код, а потім повернутися до вихідного файлу. І це припускає, що другий файл не містить або не вимагає інших файлів.
Не дарма це називається спагетті-кодом.
З огляду на це, ви можете побачити скрутне становище, яке це створює, коли ви вирішуєте вкладати цей код у решту вашої програми. Коротше кажучи, ви вклали включення залежностей, що за своєю суттю ускладнює відстеження того, де щось може піти не так.
Це не означає, що автозавантаження автоматично виправляє це, але це означає, що це не повинно бути так. Замість цього ви можете написати код, який створює екземпляри класів, викликає методи, а потім виконує код без необхідності включати щось вручну.
Більш читабельний і відстежуваний код
Роблячи це, я вважаю, що це змушує нас писати чистіший код, мабуть, більш зручний для обслуговування. Це також полегшує написання коду, який ми можемо легше відстежувати, і який легше використовувати за допомогою налагоджувача.
Тобто ми можемо встановлювати точки зупину в певних місцях нашого коду, дозволити налагоджувачу автоматично перевести нас у клас, який викликається, і повернутися до функції, яка його викликала.
Це не означає, що це не можна зробити іншим способом, але переваги значно переважують альтернативи. І, звичайно, залишається питання про те, навіщо взагалі потрібна автозавантаження (або будь-яке включення сторонніх файлів).
Але саме про це піде мова у другій частині серії.
Інше читання
Моя публікація про простори імен і автозавантаження в WordPress, а також про простий автозавантажувач для WordPress є двома іншими ресурсами, які, очевидно, стосуються цієї конкретної публікації. Тому, якщо у вас є час, перевірте їх (і не соромтеся відкривати проблему чи запит на отримання простого автозавантажувача).
