PHP 8.2 wyszło oficjalnie 8 grudnia 2022. W lipcu pisałem o zapowiedziach – teraz, gdy mam finalną wersję w rękach, czas na uczciwe podsumowanie. Co faktycznie weszło do specyfikacji, co zostało odłożone i jakie są pierwsze praktyczne wrażenia z migracji projektu PHP na nową wersję.
Template Method to jeden z prostszych wzorców behawioralnych GoF, ale bardzo skuteczny przy eliminowaniu duplikacji kodu. Definiuje szkielet algorytmu w klasie bazowej i pozwala podklasom nadpisać wybrane kroki bez zmiany ogólnej struktury. Jeśli masz kilka klas które robią „to samo, ale trochę inaczej” – Template Method jest kandydatem do refaktoringu.
Multi Source Inventory (MSI) to moduł wprowadzony w Magento 2.3, który całkowicie zmienia sposób zarządzania stanami magazynowymi. Zamiast jednego globalnego stanu dla każdego SKU, masz wiele źródeł (magazynów fizycznych, sklepów, dostawców) i algorytmy wyboru z którego źródła realizować zamówienie. Jeśli rozwijasz moduły Magento i jeszcze nie poznałeś MSI – ten wpis jest dla Ciebie.
W listopadzie 2018 pisałem o podstawowych algorytmach sortowania. Czas na Quicksort – jeden z najważniejszych algorytmów w historii informatyki, średnio O(n log n) i jeden z najszybszych w praktyce. Implementuję kilka wariantów w PHP, pokazuję gdzie Quicksort bije inne algorytmy i dlaczego wbudowany sort() PHP jest szybszy niż własna implementacja.
Implementacja własnej metody płatności w Magento 2 to jeden z trudniejszych tematów – łączy PHP, XML, JavaScript i znajomość procesu checkout. Większość tutoriali zatrzymuje się na „hello world” który pojawia się na liście metod. Pokazuję kompletną implementację: od struktury modułu, przez walidację, po integrację z zewnętrznym gateway’em płatniczym.
PHP 8.2 planowane jest na grudzień 2022. Najważniejsza nowość to readonly classes – możliwość oznaczenia całej klasy jako readonly bez dekorowania każdej właściwości z osobna. Do tego Disjunctive Normal Form types które rozszerzają system typów o bardziej złożone kombinacje. Przeglądam co wchodzi, co wypada i co to oznacza dla projektów Magento.
Magento 2 to jeden z najbardziej wzorcowych (dosłownie) frameworków PHP. Jego architektura jest niemal podręcznikowym przykładem zastosowania wzorców GoF. Jeśli rozumiesz wzorce omówione w tej serii, czytanie kodu Magento staje się znacznie łatwiejsze – zamiast „skąd się to bierze” masz „aha, to Factory” albo „to Observer przez di.xml”. Pokazuję gdzie konkretnie każdy wzorzec żyje w platformie.
Command enkapsuluje operację jako obiekt – z możliwością kolejkowania, logowania i cofania. Chain of Responsibility przekazuje żądanie przez łańcuch handlerów, gdzie każdy może je obsłużyć lub puścić dalej. Oba wzorce oddzielają „kto zleca” od „kto wykonuje”, co daje dużą elastyczność w układaniu logiki aplikacji.
Observer i Strategy to dwa z najczęściej używanych wzorców behawioralnych. Observer buduje luźno powiązany system zdarzeń – jeden obiekt zmienia stan, wiele innych reaguje. Strategy wymienia algorytmy jak klocki – ta sama operacja, różne sposoby wykonania. Oba wzorce realizują zasadę Open/Closed z SOLID.
Adapter i Facade to dwa wzorce które rozwiązują problem złożoności interfejsów – ale z różnych stron. Adapter sprawia że niekompatybilny interfejs staje się kompatybilny. Facade upraszcza złożony interfejs do prostego. Oba pojawiają się często przy integracji z zewnętrznymi bibliotekami i API.
