Зачем беспокоиться об автозагрузке в WordPress, часть 2
В предыдущем посте я рассмотрел несколько моментов, почему я считаю, что include_once, require_once и другие подобные утверждения приводят к плохой практике разработки (по крайней мере, когда речь идет о работе, которую мы выполняем с нашими проектами WordPress). ).
Если не читали, ничего страшного. Суть поста в том, что эти заявления делают:
- отладка сложнее,
- код трассировки сложнее сделать.
В конечном счете, это то, чего мы можем избежать. Я закончил пост следующим:
Это все еще оставляет вопрос, зачем вообще нужна автозагрузка (или любое включение сторонних файлов).
И хотя я хотел бы осветить все детали в этом посте, он займет этот и еще один пост, так как важно понять некоторые основополагающие темы о языках, интерпретаторах и компиляторах, прежде чем заходить слишком далеко.
Автозагрузка в WordPress: типы языков
Когда дело доходит до языков программирования, их можно разделить на два различных типа языков:
- статически типизированный
- динамически типизированный
Их тоже легко заметить.
Статически типизированные языки
Язык со статической типизацией означает, что когда вы объявляете переменную, такую как строка, целое число или число с плавающей запятой, она поддерживает этот тип на протяжении всего своего существования.
Это не означает, что его нельзя изменить или преобразовать в другой тип, но идея заключается в том, что вы объявляете его тип, и именно так он работает.
Обычно он указывается как определенный тип при объявлении, например, string или int, и чаще всего встречается в компилируемых языках.
Языки с динамической типизацией
Языки с динамической типизацией, с другой стороны, имеют более плавные переменные, за неимением лучшего термина, по своей природе.
То есть вы можете сначала объявить его как строку, затем сравнить его с целым числом, а затем снова использовать его как строку.
Интерпретатор или компилятор (в зависимости от того, какой язык вы используете) сделает все возможное, чтобы сделать вывод о том, что вы пытаетесь сделать, на основе контекста того, что вы делаете в своем коде, но это не всегда правильно.
Это может привести к странным побочным эффектам и ошибкам.
JavaScript такой. Чтобы увидеть пример, откройте консоль браузера и введите что-то вроде того, что вы видите на следующем снимке экрана (и обратите внимание на результат):
Обратите внимание, что когда мы используем стандартный знак двойного равенства, интерпретатор приводит строку к логическому типу, даже если истинная строка не является истинной.
Второй случай является точным (и именно поэтому почти всегда следует использовать тройное равенство).
Кроме того, то, как что-то может работать на одном языке, не может работать на другом языке.
Суть в том, что не ожидайте, что ваши языки будут делать то же самое только потому, что они могут поддерживать динамическую типизацию.
Какое это имеет отношение к автозагрузке?
Итак, мы немного поговорили о примитивах, и все это хорошо, но это мало что дает, когда речь идет о классах, объектах, создании экземпляров, автозагрузке и т. д., не так ли?
Цель поднятия вышеупомянутых тем — показать роль, которую играют интерпретаторы и компиляторы при работе с кодом на динамических языках.
И это важно, потому что PHP — динамический язык.
На этом этапе я изначально собирался начать рассматривать примеры PHP-кода, пространства имен, автозагрузку, операторы включения и все такое, но я стараюсь, чтобы мои статьи имели определенную длину, и это начало растягиваться немного дальше, чем я хотел. .
Итак, окончательный вывод из этого поста, если бы мне пришлось обобщать его, таков:
Языки с динамической типизацией, такие как PHP, не могут позволить себе такую роскошь, как компилируемые языки, в которых все скомпилировано в один двоичный файл. Мы должны каким-то образом сообщить программе, где существуют зависимости в контексте более крупной программы.
И об этом я постараюсь рассказать в следующем посте.