Навіщо автозавантаження в WordPress, частина 2
У попередній публікації я розглянув кілька моментів щодо того, чому я вважаю, що include_once, require_once та інші подібні твердження призводять до поганої практики розробки (принаймні, коли мова йде про роботу, яку ми виконуємо з нашими проектами WordPress ).
Якщо ви не читали, нічого страшного. Суть публікації полягає в тому, що ці заяви свідчать:
- налагодження складніше,
- код трасування складніше зробити.
Зрештою, ми можемо уникнути цього. Я закінчив допис наступним:
Це все ще залишає питання про те, навіщо взагалі потрібне автозавантаження (або будь-яке включення сторонніх файлів).
І хоча я хотів би висвітлити всі деталі в цій публікації, я візьму цю та ще одну публікацію, оскільки важливо зрозуміти деякі фундаментальні теми про мови, інтерпретатори та компілятори, перш ніж зайти занадто далеко.
Автозавантаження в WordPress: типи мов
Що стосується мов програмування, їх можна розділити на два різних типи мов:
- статично типізований
- динамічно типізований
Їх також легко помітити.
Статично типізовані мови
Мова зі статичним типом означає, що коли ви оголошуєте змінну, як-от рядок, ціле число або число з плаваючою комою, вона зберігає цей тип протягом усього свого життя.
Це не означає, що його не можна змінити або розібрати в інший тип, але ідея полягає в тому, що ви оголошуєте його тип, і саме так він працює.
Зазвичай він вказується як певний тип під час оголошення, як-от string або int, і найчастіше його можна побачити в скомпільованих мовах.
Динамічно типізовані мови
Динамічно типізовані мови, з іншого боку, мають змінні, які є більш плавними, через відсутність кращого терміну, за своєю природою.
Тобто ви можете спочатку оголосити його як рядок, потім порівняти його з цілим числом і пізніше знову використовувати як рядок.
Інтерпретатор або компілятор (залежно від мови, яку ви використовуєте) зробить усе можливе, щоб зробити висновок про те, що ви намагаєтеся зробити, на основі контексту того, що ви робите у своєму коді, але це не завжди правильно.
Це може призвести до дивних побічних ефектів і помилок.
JavaScript виглядає так. Щоб переглянути приклад, відкрийте консоль браузера та введіть щось подібне до того, що ви бачите на наступному знімку екрана (і зверніть увагу на результат):
Зауважте, що коли ми використовуємо стандартний подвійний знак рівності, інтерпретатор переводить рядок у логічний тип, навіть якщо справжній рядок не є істинним.
Другий випадок є точним (і тому майже завжди слід використовувати потрійне дорівнює).
Крім того, те, як щось може працювати однією мовою, не відповідає тому, як це може працювати іншою мовою.
Суть полягає в тому, що не очікуйте, що ваші мови робитимуть те саме лише тому, що вони можуть підтримувати динамічний тип.
Яке відношення це має до автозавантаження?
Гаразд, ми трохи поговорили про примітиви, і все це добре, але це не дуже важливо, коли йдеться про класи, об’єкти, створення екземплярів, автозавантаження тощо, чи не так?
Метою розгляду вищезазначених тем є показати роль, яку відіграють інтерпретатори та компілятори під час роботи з кодом у динамічних мовах.
І це важливо, оскільки PHP є динамічною мовою.
На цьому етапі я спочатку збирався почати розглядати зразок PHP-коду, простори імен, автозавантаження, оператори включення тощо, але я намагаюся тримати свої статті певної довжини, і це почало розтягуватися трохи далі, ніж я хотів .
Отже, остаточний висновок цієї публікації, якщо мені потрібно було підсумувати це, полягає в наступному:
Динамічно типізовані мови, такі як PHP, не мають розкоші компільованих мов, де все компілюється в єдиний двійковий файл. Ми маємо певним чином повідомити програмі, де існують залежності в контексті більшої програми.
І це те, про що я збираюся поговорити в наступній публікації.