Навіщо автозавантаження в WordPress, частина 3
У минулому дописі я сказав, що ми не можемо дозволити собі ті самі розкоші, які мають статично типізовані скомпільовані мови. Зокрема, я говорив про те, щоб не мати справу з автозавантажувачами.
Натомість скомпільовані мови можуть взяти всі файли, які складають програму, обробити їх і об’єднати в один двійковий файл.
Але для цього потрібен певний тип програми.
Автозавантаження в WordPress: компонувальники та автозавантажувачі
Тобто він використовує утиліту під назвою компонувальник. Я коротко розповім про це, але розуміння ролі, яку він відіграє в контексті компільованих мов, може допомогти провести аналогію з тим, як працює автозавантаження в WordPress (і PHP).
Що таке Linker?
Залежно від мови, з якою ви працюєте, особливо з об’єктно-орієнтованими мовами програмування, вірогідно, що код буде розподілено в кількох файлах.
Крім того, кожен із цих файлів збирається об’єднати у свої пакети (ми називаємо їх просторами імен, як PHP, і більшість скомпільованих мов роблять те саме). Отже, для демонстраційних цілей припустимо, що файли входять до своїх просторів імен.
Потім у всій кодовій базі ви маєте всі ці файли, які пов’язані через простори імен, але розподілені по окремих файлах.
Коли настає час скомпілювати все це в єдиний виконуваний двійковий файл, програма під назвою компонувальник аналізує код і виконує магічні дії, щоб допомогти створити єдиний виконуваний двійковий файл (на відміну від набору файлів, які ми звикли бачити в проекти на базі PHP).
А автозавантаження?
Тож у чому схожість між автозавантаженням і зв’язуванням? Як згадувалося, проекти, які ми створюємо на WordPress (і PHP), постійно зберігаються в окремих файлах. Тобто вони ніколи не будуть скомпільовані в один файл.
Я б сказав, що колись (хоча це все ще трапляється), ми використовуємо include_once або require_once, щоб додати всі потрібні нам залежності. Але автозавантаження позбавляє цього необхідності.
Написання автозавантажувача вручну (без використання PSR4).
Натомість автозавантажувач може взяти код, який ми маємо, коли ми, скажімо, створюємо екземпляр класу, а потім автоматично завантажити (звідси його назва) файл без необхідності вручну включати файл.
Аналогія
У той час як компонувальник аналізуватиме кодову базу програми та автоматично збиратиме двійковий файл, автозавантажувачу знадобиться певний тип конфігурації, щоб він міг знати, де знаходяться класи, як знайти файл у файловій системі, враховуючи його простір імен та назву класу, і так далі.
Крім того, це можна зробити різними способами залежно від того, чи ви вирішите використовувати щось на зразок PSR-4 чи іншу стратегію завантаження. Але це виходить за рамки цієї публікації.
Це воно
Ідея всього цього полягає в тому, щоб зрозуміти, як статично типізовані мови, які часто – хоча і не завжди – є компільованими мовами, і як динамічно типізовані – які часто не компільуються (наприклад, JavaScript, PHP тощо) – можуть працювати схожими, хоча й різні шляхи.
Коротко:
- скомпільовані мови використовують компонувальники,
- динамічні мови використовують автозавантажувачі.
І це все, насправді.
Але чому це важливо? Щоб зрозуміти переваги автозавантаження в WordPress і мати основу для більш складних тем, я вважаю, що важливо розуміти, як і чому ми робимо певні речі.
І якщо нічого іншого, це може допомогти нам стати кращими розробниками.
