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