W poprzednim poście omówiłem kilka kwestii, dlaczego uważam, że include_once, wymaganie_once i inne podobne stwierdzenia skutkują słabymi praktykami programistycznymi (przynajmniej jeśli chodzi o pracę, którą wykonujemy z naszymi projektami WordPress ).
Jeśli tego nie czytałeś, nic wielkiego. Istotą postu jest to, że te stwierdzenia mówią:
- trudniejsze debugowanie,
- kod śledzenia trudniejszy do zrobienia.
Ostatecznie są to rzeczy, których możemy uniknąć. Zakończyłem post następującym tekstem:
To wciąż pozostawia pytanie, dlaczego automatyczne ładowanie (lub jakiekolwiek włączanie plików stron trzecich) jest w ogóle potrzebne.
I chociaż chciałbym omówić wszystkie szczegóły w tym poście, przyjmę ten i jeszcze jeden post jako ważne, aby zrozumieć niektóre podstawowe tematy dotyczące języków, tłumaczy i kompilatorów, zanim przejdziemy za daleko.
Automatyczne ładowanie w WordPress: rodzaje języków
Jeśli chodzi o języki programowania, można je podzielić na dwa różne typy języków:
- wpisane statycznie
- wpisywany dynamicznie
Są też łatwe do zauważenia.
Języki wpisywane statycznie
Język z typami statycznymi oznacza, że kiedy deklarujesz zmienną, taką jak ciąg, liczba całkowita lub liczba zmiennoprzecinkowa, zachowuje ten typ przez cały okres istnienia.
Nie oznacza to, że nie można go zmienić lub przetworzyć na inny typ, ale chodzi o to, że deklarujesz jego typ i tak to działa.
Zwykle jest określany jako określony typ, gdy jest deklarowany, na przykład string lub int, i jest najczęściej spotykany w językach skompilowanych.
Języki z typowaniem dynamicznym
Z drugiej strony, języki z typowaniem dynamicznym mają zmienne, które z natury są bardziej płynne, z braku lepszego terminu.
Oznacza to, że możesz początkowo zadeklarować go jako łańcuch, a następnie porównać go z liczbą całkowitą, a później ponownie użyć jako łańcucha.
Interpreter lub kompilator (w zależności od używanego języka) zrobi wszystko, co w jego mocy, aby wywnioskować, co próbujesz zrobić, na podstawie kontekstu tego, co robisz w swoim kodzie, ale nie zawsze jest to właściwe.
To może prowadzić do dziwnych skutków ubocznych i błędów.
JavaScript jest taki. Aby zobaczyć przykład, otwórz konsolę przeglądarki i wprowadź coś podobnego do tego, co widzisz na poniższym zrzucie ekranu (i zwróć uwagę na wynik):
Zauważ, że kiedy używamy standardowego znaku podwójnej równości, interpreter przekształca ciąg w typ logiczny, nawet jeśli prawdziwy ciąg nie jest prawdziwy.
Drugi przypadek jest dokładny (i dlatego prawie zawsze powinno się stosować potrójne równanie).
Co więcej, sposób, w jaki coś może działać w jednym języku, nie jest tym, jak może działać w innym języku.
Najważniejsze jest to, że nie oczekuj, że twoje języki zrobią to samo tylko dlatego, że mogą obsługiwać dynamiczne pisanie.
Co to ma wspólnego z automatycznym ładowaniem?
Okej, więc rozmawialiśmy trochę o prymitywach i wszystko to jest w porządku, ale nie robi to wiele, gdy mówimy o klasach, obiektach, instancjach, automatycznym ładowaniu i tak dalej, prawda?
Celem poruszenia wyżej wymienionych tematów jest pokazanie roli, jaką interpretery i kompilatory odgrywają podczas pracy z kodem w językach dynamicznych.
A to jest ważne, ponieważ PHP jest językiem dynamicznym.
W tym momencie miałem zamiar zacząć patrzeć na przykładowy kod PHP, przestrzenie nazw, automatyczne ładowanie, instrukcje include i wszystko to, ale staram się, aby moje artykuły miały określoną długość i zaczęło się to rozciągać trochę dalej niż chciałem .
Więc ostatecznym wnioskiem z tego postu, jeśli miałbym to podsumować, jest to:
Języki z typowaniem dynamicznym, takie jak PHP, nie mają luksusu języków kompilowanych, w których wszystko jest skompilowane w jeden plik binarny. Musimy w jakiś sposób powiedzieć programowi, gdzie istnieją zależności w kontekście większego programu.
I to właśnie zamierzam omówić w następnym poście.