W ostatnim poście powiedziałem, że nie stać nas na niektóre z tych samych luksusów, które mają statycznie pisane, skompilowane języki. W szczególności mówiłem o pomyśle, aby nie mieć do czynienia z autoloaderami.
Zamiast tego języki skompilowane mogą pobierać wszystkie pliki składające się na program, przetwarzać je i pakować w jeden plik binarny.
Ale żeby to zrobić, potrzebuje do tego specjalnego programu.
Automatyczne ładowanie w WordPress: Linkery i Autoloadery
Oznacza to, że używa narzędzia o nazwie linker. Omówię to krótko, ale zobaczenie roli, jaką odgrywa w kontekście języków kompilowanych, może pomóc w narysowaniu analogii do tego, jak działa automatyczne ładowanie w WordPress (i PHP).
Co to jest łącznik?
W zależności od języka, z którym pracujesz, zwłaszcza w przypadku języków programowania obiektowego, prawdopodobnie kod będzie rozłożony na wiele plików.
Co więcej, każdy z tych plików zostanie dołączony do ich pakietów (nazywamy je przestrzeniami nazw jako PHP i większość języków kompilowanych również robi to samo). Tak więc dla celów demonstracyjnych załóżmy, że pliki są zawarte w ich przestrzeniach nazw.
Następnie, w całym kodzie, masz wszystkie te pliki, które są powiązane poprzez przestrzenie nazw, ale są rozłożone w osobnych plikach.
Kiedy przychodzi czas na skompilowanie tego wszystkiego w jeden wykonywalny plik binarny, program zwany linkerem analizuje kod i działa magicznie, aby pomóc w stworzeniu pojedynczego, wykonywalnego pliku binarnego (w przeciwieństwie do zbioru plików, do których przywykliśmy projekty oparte na PHP).
A automatyczne ładowanie?
Jakie są więc podobieństwa między automatycznym ładowaniem a linkowaniem? Jak wspomniano, projekty, które budujemy w WordPressie (i PHP) konsekwentnie znajdują się w osobnych plikach. Oznacza to, że nigdy nie zostaną skompilowane do jednego pliku.
Powiedziałbym, że kiedyś (chociaż to się nadal zdarza), używamy include_once lub require_once, aby wprowadzić wszystkie potrzebne nam zależności. Ale automatyczne ładowanie neguje potrzebę zrobienia tego.
Ręczne pisanie autoloadera (bez użycia PSR4).
Zamiast tego autoloader może pobrać kod, który mamy, gdy, powiedzmy, tworzymy instancję klasy, a następnie automatycznie ładuje (stąd jego nazwa) plik bez konieczności ręcznego dołączania pliku.
Analogia
Podczas gdy linker przeanalizuje bazę kodu programu i automatycznie złoży plik binarny, autoloader będzie potrzebował pewnego rodzaju konfiguracji, aby poinformować go, gdzie znajdują się klasy, jak zlokalizować plik w systemie plików, biorąc pod uwagę jego przestrzeń nazw i nazwę klasy, oraz wkrótce.
Co więcej, można to zrobić na różne sposoby, w zależności od tego, czy zdecydujesz się użyć czegoś takiego jak PSR-4, czy innej strategii ładowania. Ale to wykracza poza zakres tego postu.
Otóż to
Ideą tego wszystkiego jest zrozumienie, w jaki sposób języki statycznie typowane, które są często – choć nie zawsze – językami skompilowanymi, oraz jak typowane dynamicznie – często nieskompilowane (pomyśl o JavaScript, PHP itp.) – mogą działać w podobnym, aczkolwiek różne sposoby.
W skrócie:
- języki skompilowane używają linkerów,
- języki dynamiczne używają autoloaderów.
I to wszystko, naprawdę.
Ale dlaczego jest to ważne? Aby zrozumieć korzyści płynące z automatycznego ładowania w WordPressie i mieć podstawy do bardziej zaawansowanych tematów, uważam, że ważne jest, aby zrozumieć, jak i dlaczego robimy pewne rzeczy, które robimy.
A jeśli nic więcej, może nam pomóc być lepszymi programistami.
