WordPress i PHP 8 – Kompatybilność i korzyści!

Opublikowany: 2021-01-04

Większość technicznych maniaków jest podekscytowana PHP 8.0 iz pewnością zmiany są tym razem ogromne. każdy poświęci trochę czasu, aby zrozumieć kompatybilność, konfiguracje, zalety itp. PHP 8, a wśród wszystkich, jedno z największych pojawiających się pytań brzmi: „czy WordPress jest już kompatybilny z PHP 8, a jeśli nie, to jakie działania są potrzebne”.

WordPress i PHP 8 - Kompatybilność i korzyści!

Cóż, gdy tylko PHP 8 zostało wydane, nasz czas ekspertów zagłębił się w najgłębszy poziom testowania, a wynik może zaszokować każdego! Tak, wiemy już wszystko i z przyjemnością obnosimy się z naszymi raportami i wynikami degustacji.

Nie tylko pokażemy, co się zmieniło, ale także udzielimy czystej porady, czy powinieneś zaktualizować PHP 8, czy nie.

Tyle przełomowych zmian w PHP 8: Ale dlaczego?

PHP 8 to ogromna aktualizacja PHP i powszechną praktyką jest usuwanie negatywów w głównych wersjach z ostatniego zakresu podrzędnych wersji. W przypadku popularnego PHP 8 kilka przełomowych zmian zostało zredukowanych w poprzednich wersjach 7.*.

Dlatego w przypadku projektów, które były przez lata uważnie aktualizowane, naprawiając ich derogowane interfejsy API, aktualizacja nie powinna być wcale trudna. Prawdę mówiąc, wersje PHP 7.* zaobserwowały znacznie większy zestaw przestarzałych wersji w porównaniu z poprzednimi wersjami PHP.

Powiedzielibyśmy, że PHP 5.6 do PHP 7 to dość prosta migracja, ale przejście z 7.x do 8 może być nieco bolesne, zwłaszcza dla starych baz kodu, w tym WordPress, poza kilkoma dostępnymi wtyczkami.

Z pewnością w przypadku dobrze napisanych baz kodu lub aktualnych baz kodu z najnowszymi wersjami PHP, duże problemy nie wystąpią. Jednak rzeczywistość jest taka, że ​​WordPress nie jest taką bazą kodu.

Czy WordPress jest już kompatybilny z PHP 8?

Szczerze mówiąc, może WordPress jest już kompatybilny z PHP 8, ale zapieczętowanie tych słów nie jest możliwe. WordPress dąży do tego, aby zawsze być zgodny z najnowszymi wersjami PHP . Jednak w dalszej części tego przewodnika szczegółowo przeanalizowaliśmy największe obawy.

Zgodność z Wordpress i PHP2

Wykonaliśmy niesamowitą robotę polegającą na znalezieniu idealnych rozwiązań większości problemów ze zgodnością, które można znaleźć przy użyciu dostępnych strategii. Z pewnością zagłębimy się w to, co tam było i jakie są z nimi problemy.

Jakie zmiany wydajności nadchodzą?

Najważniejszą, potencjalnie ekscytującą funkcją pojawiającą się w PHP 8 jest kompilacja i debugowanie JIT (Just In Time). Jak wiemy, PHP jest językiem interpretowanym, co oznacza, że ​​po uruchomieniu jest tłumaczony na kod maszynowy.

JIT śledzi kod, który jest często używany i pracuje nad optymalizacją tłumaczenia kodu maszynowego, aby umożliwić jego ponowne użycie. Teraz może to skutkować ogromną poprawą wydajności dla danej funkcjonalności.

Włączenie JIT do różnych języków, na przykład JavaScript, historycznie spowodowało eksplozję nowych aplikacji. Na przykład maszyny wirtualne działające w JS były w początkach sieci niewyobrażalne. Kilka zadań, które w przeszłości wymagało instalacji modułów na serwerze, będzie praktycznych przy użyciu podstawowych bibliotek PHP.

Na razie rzeczywisty wzrost wydajności aplikacji internetowych, takich jak WordPress, jest minimalny. Poza tym minie dużo czasu, zanim programista lub przeciętny użytkownik WordPressa skorzysta z zalet tej nowej funkcji.

Istnieje kilka innych nowych funkcji, które ułatwią życie programistom; jest mało prawdopodobne, że będą one używane w motywach i wtyczkach WP w najbliższej przyszłości, ponieważ większość z nich złamałaby kompatybilność z wcześniejszymi wersjami PHP, które są nadal używane przez kilka witryn WordPress.

Jak zaktualizować PHP dla swojej witryny WordPress?

W tym przewodniku opiszemy, jak wygodnie możesz zaktualizować PHP do najnowszej wersji, a co najważniejsze, bez uszkadzania witryny WordPress.

Jeśli chcesz poznać ścieżkę, po prostu sprawdź swoją aktualną wersję PHP, a następnie Zaktualizuj WordPress do najnowszej wersji. Następnie zainstaluj „skaner PHP one.com” i uruchom skanowanie, aby rozwiązać potencjalne problemy. Ponadto zaktualizuj PHP do najnowszej wersji i sprawdź, czy Twoja witryna działa zgodnie z oczekiwaniami, czy nie.

Pokażmy cały proces.

Krok 1: Sprawdź swoją aktualną wersję PHP

Na samym początku musisz sprawdzić, na jakiej wersji PHP aktualnie się rozwijasz. Możesz uzyskać informacje o aktualnej wersji PHP Twojej witryny ze strony phpinfo.

Jeśli korzystasz z cPanel, możesz wyświetlić wersję PHP z artykułu , jak wyświetlić i zmienić wersję PHP w cPanel.

Jeśli używasz PHP w wersji 7.3 lub nowszej, wszystko jest w porządku. Dla tych, którzy mają PHP 7.2, potrzebna jest aktualizacja. Proszę pielęgnować do kroku 2.

Krok 2: Zaktualizuj WordPressa do najnowszej wersji

Upewnij się, że rdzeń WordPress oraz wszystkie wtyczki i motywy są zaktualizowane do najnowszej wersji, jeśli naprawdę chcesz uniknąć awarii.

  1. Zaloguj się do administratora WordPressa i kliknij Pulpit > Aktualizacje .
  2. Sprawdź, czy masz zainstalowaną najnowszą wersję WordPressa oraz czy wszystkie motywy i wtyczki są aktualne. Zaktualizuj teraz swój WordPress do najnowszej wersji.

Krok 3: Zainstaluj „skaner PHP one.com”.

  1. W panelu administracyjnym WordPressa dotknij one.com > Wtyczki .
  2. Znajdź skaner PHP one.com i dotknij opcji Zainstaluj teraz .
  3. Teraz kliknij Aktywuj i przejdź do następnego kroku.

Krok 4: Uruchom skanowanie i napraw potencjalne problemy

  1. W menu po lewej stronie dotknij Skaner PHP .
  2. Dotknij PHP w wersji 7.4 , następnie " Wszystkie motywy i wtyczki " , a następnie dotknij Rozpocznij skanowanie .
  3. Możesz kontynuować po zakończeniu skanowania.
  4. Możesz mieć trzy wyniki:

Kompatybilny = To znaczy, że wszystko jest w porządku!

Ostrzeżenie = Oznacza to, że powinno działać, ale może powodować problemy z nadchodzącą wersją PHP.

Błąd = Nie jest tak dobrze, na pewno spowoduje problemy po aktualizacji.

Napraw wszelkie motywy lub wtyczki, które odczytują błędy, aktualizując je do najnowszej wersji lub zastępując alternatywną wtyczką zapewniającą tę samą funkcjonalność.

Wskazówka: zalecamy używanie tylko tych wtyczek, które korzystają z wtyczek, które są regularnie aktualizowane i nie powodują problemów ze zgodnością z najnowszą wersją WordPressa. Poza tym dobrą praktyką jest usuwanie niechcianych wtyczek w celu zwiększenia wydajności witryny.

Krok 5: Zaktualizuj PHP do wersji 8.0

Wszystko gotowe do aktualizacji PHP. Zalecamy jednoczesne włączenie komunikatów o błędach PHP. Jeśli wystąpi problem z kodem, zobaczysz komunikaty o błędach informujące, co go powoduje, a także gdzie dokładnie się znajduje.

  1. W panelu sterowania wróć do ustawień PHP i bazy danych .
  2. Przewiń w dół do komunikatów o błędach PHP .
  3. Kliknij Aktualizuj po ustawieniu komunikatów o błędach na Włączone .
  4. Bezpośrednio poniżej zmień wersję i dotknij Aktualizuj .

Krok 6: Sprawdź, czy Twoja witryna działa zgodnie z oczekiwaniami.

Teraz masz zaktualizowaną wersję PHP i minie co najmniej 20 minut , zanim zmiany zostaną zastosowane. Jeśli Twoja witryna odwiedza dużo osób, czas może wydłużyć się nawet do kilku godzin. Z tego powodu zalecamy sprawdzenie swojej witryny minimum kilka razy w ciągu najbliższych 24 godzin.

Jeśli Twoja witryna nie działa zgodnie z oczekiwaniami, najbardziej prawdopodobnym problemem jest motyw lub dowolna wtyczka. Aby dowiedzieć się, co dokładnie powoduje problemy:

  1. Tymczasowo przełącz się na domyślny motyw WordPress, powiedzielibyśmy „Twenty Seventeen”.
  2. Wybierz wszystkie zainstalowane wtyczki i całkowicie je dezaktywuj.
  3. Włącz motywy i wszystkie wtyczki ponownie, jeden po drugim, i sprawdzaj za każdym razem, czy Twoja witryna nadal działa, czy nie. W ten sposób możesz złapać winowajcę.

Jeśli mówimy o kwestiach technicznych, to kompatybilność współczesnego wieczoru WordPressa z szeroko dyskutowanym PHP 8 jest na podobnym poziomie, jak w przypadku wydań WordPressa tuż przed pojawieniem się nowej wersji PHP.

Nasze testy były równie obszerne, poprawki równie drobiazgowe, a poziom naprawienia problemów był tak duży, jak wszelkie poprawki kompatybilności PHP w rdzeniu WordPressa. Jednakże, jeśli nie będziesz postępować zgodnie z tym przewodnikiem, nie będziesz w stanie zrozumieć wyzwań związanych z kompatybilnością i czerpać maksymalnych korzyści z PHP 8.

Ogromna ilość przełomowych zmian i rodzaje zmian zawartych w PHP 8, poza kilkoma dodatkowymi zawiłościami w narzędziach między wersjami, z pewnością sprawiają, że to wyzwanie kompatybilności jest większą bestią niż to, czego doświadczyliśmy wcześniej z poprzednimi wersjami PHP. Celem niniejszego raportu jest wyjaśnienie tego samego przypadku.

Wyzwania związane z kompatybilnością WordPress i PHP8

Pokażemy Ci kilka strategii, które możesz wdrożyć, aby stworzyć istniejącą bazę kodu kompatybilną z PHP 8.

  • Narzędzia do analizy statycznej, takie jak PHPCompatibility do wykrywania problemów składniowych.
  • Zautomatyzowane testowanie w celu wykrycia problemów w czasie wykonywania.
  • Testowanie ręczne w celu wykrycia problemów w czasie wykonywania.

W zależności od pokrycia twojego zestawu testów oraz proporcji zmian składniowych i czasu wykonywania, strategie te dobrze służą do poprawiania zgodności bazy kodu z nową wersją PHP (obecnie omawiane jest PHP 8).

Rzeczywiście, w przypadku PHP 8 i WordPress istnieje kilka dodatkowych wyzwań, które utrudniają poleganie na tych strategiach w celu zapewnienia idealnej kompatybilności WordPressa z PHP 8. Poniżej opiszemy strategie, które wdrożyliśmy dla WordPressa i udostępnij wyniki.

Narzędzia do analizy statycznej

Ze względu na charakter kilku zmian w PHP 8.0 problemy, które można wykryć za pomocą analizy statycznej, są ograniczone. W tych okolicznościach, w których analiza statyczna wychodzi poza ich tradycyjny potencjał i planuje śledzenie wartości zmiennych i stałych oraz typu środowiska wykonawczego, wyniki takich skanowań z pewnością będą podatne na fałszywe alarmy.

Narzędzia do analizy statycznej

Poza tym, PHP Compatibility jest jedynym statycznym narzędziem analitycznym przeznaczonym do wyszukiwania problemów związanych z kompatybilnością PHP z różnymi wersjami.

Oprócz zgodności z PHP inne narzędzia do analizy statycznej zgłaszają większy zakres problemów. Dopracowanie wyników w celu wykrycia problemów, które są związane z kompatybilnością między wersjami PHP i faktycznie są poprawne, jest dość czasochłonne i wymaga dogłębnej wiedzy na temat narzędzi, zwłaszcza na temat ich konfigurowania pod kątem jak najmniejszego szumu.

Jednocześnie narzędzia te są w ciągłej niestabilności, próbując kontynuować zmiany w wersji PHP i aktualizując możliwe skany. Dlatego możemy się spodziewać, że w najbliższej przyszłości te narzędzia wykryją jeszcze więcej problemów.

Tak więc niezależnie od tego, co już było i można znaleźć w tej chwili, istnieje szansa, że ​​narzędzia te będą nadal znajdować więcej problemów w (niedalekiej) przyszłości.

Skanowanie WordPressa z PHPCompatibility

„__destruct() nie będzie już wywoływany po die() w __construct()” to kolejny problem PHP 8 wykryty przez PHPCompatibility. Jest to doskonale wykrywane przez skaner. Jednak po dalszej analizie okazało się, że nie jest to problematyczne w tym przypadku.

Poza tym PHPCompatibility wykrył problem w kodzie używanym przez „edytor wtyczek/motywów”. Zaangażowane analizy kodu wykazały istnienie ukrytego przeoczenia w kodzie. W edytorze WordPress oczekuje na wykonanie minimalnej analizy kodu; jednak nie bierze pod uwagę kodu PHP 5.3+.

Biorąc pod uwagę odpowiednie zmiany w PHP8, problem ten jest teraz bardziej skomplikowany do rozwiązania. Przeprowadziliśmy skany z PHPCompatibility z opracowaną wersją, a wyniki, jak się spodziewaliśmy, znacznie różniły się od tego, co uzyskaliśmy przy poprzednich aktualizacjach PHP. Problemy wykryte przez skaner są obsługiwane zewnętrznie.

Skanowanie WordPressa za pomocą Exakat

Mówiąc o ostatnim publicznym skanie, który miał miejsce 16 października, opartym na trunku WP, Exakat zgłasza łącznie 149.567 problemów.

Raport kompatybilności PHP 8 pokazuje nam w sumie 93 problemy. Jest to jednak niekompletne, ponieważ numer analizy dotyczący PHP 8 nie jest zawarty w raporcie.

Chociaż spodziewamy się, że raporty te będą zawierały dużą liczbę fałszywych alarmów, ponieważ WordPress nie używa deklaracji typów, a zatem typy są ekstrapolowane na podstawie znalezionego kodu i typów pokazanych w docblocks, problemy te nadal należy rozpatrywać indywidualnie.

Nieważne, że tylko 1% znalezionych problemów jest poprawnych, które nadal zmniejszałyby się do ~450 błędów, z którymi nadal należy się uporać. Poza tym, duża ilość czasu wymagana do odrzucenia autentycznych problemów z fałszywych alarmów.

Skanowanie WordPressa za pomocą PHPStan

Skanowanie za pomocą PHPStan wymaga w pełni dostosowanego zestawu reguł, aby uzyskać zdalnie użyteczne wyniki, a mimo to okazuje się, że są wypełnione kilkoma fałszywymi alarmami, co sprawia, że ​​dane wyjściowe nie nadają się do użytku.

Uwaga: Nie krytykujemy narzędzi PHPStan, ale jest to w dużej mierze spowodowane faktem, że WordPress prawie nie używa deklaracji typów, podczas gdy z drugiej strony PHPStan jest przede wszystkim skłonny do projektów wykorzystujących nowoczesny kod, prawda?

Wstępne skanowanie obejmujące najbardziej podstawowe konfiguracje przyniesie ponad 20 000 problemów. Skanowanie z wysoce dostosowanym wyżej wymienionym zestawem reguł, ukierunkowanym konkretnie na problemy związane z PHP 8, nadal daje dokładnie 580 problemów na poziomie 5 i dodatkowe 2.150 potencjalnych problemów na poziomie 7. Prawdopodobnie będą one zawierać kilka fałszywych alarmów, a jednak dadzą 380 problemów więcej na poziomie 8 z podobnym zastrzeżeniem.

Zgłoszenie Trac zostało niedawno otwarte w celu rozwiązania listy problemów na podstawie nieznanej konfiguracji, ale w pełni ukierunkowanego niedopasowania typu parametrów (poziom 5). Dostępna jest wersja robocza PR , aby rozwiązać te problemy.

Pochłaniająca ocena tego wymagania operacyjnego wskazuje, że większość proponowanych poprawek będzie typować zmienne do oczekiwanego typu i ukrywać problemy, a nie naprawiać ich poprzez odpowiednie sprawdzanie. Prowadzi to do nieoczekiwanego zachowania aplikacji w przypadku, gdy tym zmianom nie towarzyszą ścisłe testy jednostkowe. Poza tym tit prawdopodobnie powoduje coraz większe trudności podczas debugowania błędów w dalszej części linii.

Obecnie nie potwierdzono, czy proponowane poprawki są uzasadnione, czy też zidentyfikowane problemy powinny być traktowane jako fałszywe alarmy.

Testowanie

Analiza statyczna może zajść tak daleko z powodu natury problematycznych swapów w PHP8. Ręczne przeglądanie i testowanie oprogramowania okazuje się być tak żmudną pracą, a ludzie są również skłonni do przeoczenia rzeczy, gdy jest na co zwrócić uwagę.

Teraz, mówiąc o testach wykonywanych przez użytkowników końcowych, okazują się one stosunkowo bezużyteczne, ponieważ zwykle skutkują testowaniem „szczęśliwych ścieżek”. Jeśli chcemy uzyskać bardziej wiarygodne wyniki, potrzebujemy kompleksowych testów eksploracyjnych i regresyjnych.

Testowanie

Posiadanie automatycznych testów wysokiej jakości i uruchamianie ich w PHP 8 jest ważniejsze niż cokolwiek innego. Będzie to doskonałe wskazanie oczekiwanego problemu z PHP 8.0.

Większość technicznych maniaków jest podekscytowana PHP 8.0 iz pewnością zmiany są tym razem ogromne. każdy poświęci trochę czasu, aby zrozumieć kompatybilność, konfiguracje, korzyści itp. PHP 8, a wśród wszystkich, jedno z największych pojawiających się pytań brzmi: „czy WordPress jest już kompatybilny z PHP 8, a jeśli nie, to jakie działania są potrzebne."

Cóż, gdy tylko PHP 8 zostało wydane, nasz czas ekspertów zagłębił się w najgłębszy poziom testów, a wynik może zaszokować każdego! tak, wiemy już wszystko i z przyjemnością obnosimy się z naszymi raportami i wynikami testów.

Przejdźmy teraz do uruchamiania testów automatycznych w PHP 8.

Uruchamianie testów automatycznych w PHP 8

PHPUnit 9.3 to pierwsza wersja PHPUnit, która jest oficjalnie kompatybilna z PHP 8.0 i została wydana w sierpniu 2020 r. Cóż, uruchomienie zautomatyzowanego zestawu testów działającego na PHP jest trudne, ponieważ jest to de facto narzędzie do testów jednostkowych.

działa-automatycznie

Uruchomienie zautomatyzowanego zestawu testów na PHP 8 zabiera nas w kolejną króliczą dziurę jako de facto narzędzie do wykonywania testów jednostkowych w świecie PHP; PHPUnit zwykle co roku robi ogromne wydanie, z każdym większym wsparciem dla poprzednich wersji PHP. Wprowadza przełomowe zmiany, ale ponieważ PHPUnit 9.3 jest oficjalnie kompatybilny z PHP 8.0, jak wspomnieliśmy powyżej, nie musisz się martwić!

Wiemy, że WordPress jako minimum nadal obsługuje PHP 5.6. Aby uruchomić testy na PHP 8.0, każdy zestaw testów związany z WordPress musi być w pełni kompatybilny z PHPUnit 5 aż do PHPUnit 9. Z pewnością zbudowane są narzędzia, które Ci w tym pomogą; wdrożenie tych narzędzi w celu zapewnienia kompatybilności zestawu testów nadal wymaga wysiłku i czasu.

Uruchamianie testów na PHP8 dla WordPress Core

Testy dla WP Core obecnie przechodzą i działają na PHP 8. Testy te są przeprowadzane na zainstalowanej wersji kompozytora PHPUnit 7.5. Mimo że PHPUnit 9.3 jest najstarszą wersją PHPUnit, która jest oficjalnie kompatybilna z PHP 8.

Ten ostatni problem został rozwiązany poprzez skopiowanie wybranej liczby plików/klas z PHPUnit 9.3 do zestawu testowego WordPress, z wyłączeniem klas natywnych PHPUnit z generacji autoload Composer, wspierających wykorzystanie kopii z PHPUnit 9.3 w zestawie testowym WordPress. To działa, na razie jednak nazwalibyśmy to zwariowanym rozwiązaniem i może nie być trwałe w nadchodzącym czasie, poza konserwacją, której może obecnie potrzebować.

Ze względu na jakość testów na początku był on z pewnością niski, ponieważ w większości przypadków stosowano sprawdzanie typu luźnego.

Cofając się głębiej, bilet Traca, aby rozwiązać ten problem, został otwarty w 2016 roku. Biorąc pod uwagę ściślejsze przestrzeganie typów w PHP, ten bilet został przywrócony. Podjęto wiele pracy, aby to złagodzić.

Podczas gdy pisaliśmy, istnieje około 800 instancji (676 attachEquals() dodanych do 96 attachNotEquals()). Nadal wykorzystujemy sprawdzanie luźnych typów — w porównaniu z ponad 8000 instancji.

Częściowo, asercje typu luźnego, które pozostały, są legalne podczas porównywania obiektów; po części z pewnością należy się nimi zająć. Jednak obecnie prowadziłoby to do niepowodzeń testów. Te ostatnie podkreślają niedociągnięcia zarówno w testach, jak i rzadziej w testowanym kodzie.

Testowanie motywów i wtyczek

Dostępnych jest tylko niewielki procent wtyczek, tych profesjonalnie opracowanych i bardziej popularnych, które posiadają automatyczne testy. Ogólnie rzecz biorąc, jest to niepokojące, ponieważ normalna witryna WordPress na pewno ma prawie 19 lub 20 wtyczek. Sporo witryn działa z jeszcze większą liczbą wtyczek! Posiadanie automatycznego testowania motywów jest jeszcze rzadsze.

Trudno jest pozwolić, aby te zestawy testów działały w PHP w wersji 8. A także zanim można będzie uzyskać wgląd w kompatybilność wtyczek i motywów z PHP 8.

Jednak wtyczki/motywy, które posiadają, to w większości te, w których można spodziewać się minimalnej liczby problemów z PHP 8.0. Wołamy tak, ponieważ takie motywy/wtyczki wykorzystują profesjonalny model rozwoju.

Większym powodem do niepokoju jest mnogość testów i motywów bez testów, ponieważ są one bardziej podatne na problemy podczas pracy z PHP 8.

W przypadku motywów i wtyczek, które mają testy, istnieją przede wszystkim dwa rodzaje testów, które mogą, ale nie muszą, mieć na swoim miejscu:

  • Testy jednostkowe . Samodzielne testy, które „wyśmiewają” WP, aby umożliwić testowanie kodu wtyczki. Wykorzystywane są popularne frameworki, takie jak BrainMonkey i Mockery .
  • Testy integracyjne . Teraz testy integracyjne to miejsce, w którym sam WordPress ładuje się przed uruchomieniem zestawu testów, i użyje kodu WPcore i zintegruje się z zestawem testów WP.

Testy integracyjne

Wiemy, że WordPress zdecydował się pozostać przy PHPUnit 7.5. Co to znaczy?

Cóż, w przypadku testów integracji motywów i wtyczek te również zostaną przeniesione do PHPUnit 7.5 (maksymalnie).

Motywy i wtyczki będą musiały albo skopiować hack w WP Core, aby ich testy integracji działały idealnie, albo alternatywnie będą musiały użyć plików w WP Core. Jednak wtedy będą musieli stworzyć niestandardowy autoloader, ponieważ nie można użyć tego samego hacka do generowania automatycznego ładowania Composera.

Jeśli pliki natywne PHPUnit i tak muszą być zabezpieczone przed załadowaniem, taki niestandardowy autoloader z pewnością będzie musiał zostać załadowany tuż przed plikiem autoload Composera.

Testy jednostkowe

W przypadku testów jednostkowych z pomocą Mockery lub BrainMonkey, PHPUnit > 8 jest wymagane, ponieważ framework Mockery dostępny dla PHPUnit 7.x nie jest kompatybilny z PHP 8.0. Dlatego porównywalność tych zestawów testów jest obowiązkowa w przypadku PHPUnit 5 do 9, co z pewnością stanowi kolejne wyzwanie.

Jak?

Do uruchomienia każdego zestawu testów wymagane są różne wersje PHPUnit, gdy używane są oba rodzaje zestawów testów. Aby pogorszyć tę okoliczność, wtyczki zwykle mają potwierdzony plik composer.lock, aby zapewnić, że ich zależności uruchomieniowe są w danej wersji, na której mogą polegać i która jest w pełni kompatybilna z PHP 5.6.

Testy jednostkowe

Czasami ta ostatnia część jest wymuszana przez posiadanie konfiguracji typu php 5.6 platformy w pliku composer.json. Oznacza to również, że ich zależności programistyczne BrainMonkey, Mockery, PHPUnit również zostaną zablokowane w wersji zgodnej z PHP 5.6. teraz z pewnością uniemożliwiłoby to uruchamianie testów na PHP 8.0.

Możesz to obejść, usuwając w locie platformę, oprócz aktualizacji plików composer.lock i composer.json. Jednak sprawia to, że testowanie PHP 8.0 jest bardziej zaangażowane, zarówno w CI, jak i lokalnie, dla jego programistów.

Kompatybilność z PHP 8 wygląda nieco trudnie na dużych witrynach WordPress

Po prostu badając łańcuch przełomowych zmian w PHP 8, możemy potwierdzić, że jest to podatne na poważne awarie w witrynach z niejasną przyczyną tego złamania. W pewnych momentach błąd wystąpi w jednym miejscu, ale jest generowany przez motyw lub wtyczkę w innym miejscu, co z pewnością utrudniłoby debugowanie tych problemów.

accuwebhosting.com jest z pewnością aktywnie utrzymywaną witryną WordPress i wspiera ją dedykowany zespół profesjonalnych programistów. Zdecydowana większość witryn WordPress nie ma takiego luksusu, a łagodzenie problemów ze zgodnością na tych witrynach z pewnością będzie wyzwaniem.

Jak długo programiści muszą aktualizować?

Cykl życia każdej wersji PHP wynosi 2 lata, a błędy są naprawiane w tej erze. Dodany zostaje kolejny rok, podczas którego łatane są problemy z bezpieczeństwem. PHP 7.4 pojawiło się w listopadzie 2019 roku. Była to ostateczna wersja PHP 7. Oznacza to, że błędy w PHP 7.4 zostaną naprawione do listopada 2021 roku. Problemy z bezpieczeństwem zostaną naprawione do listopada 2022 roku. w tym momencie.

programiści-mają-zaktualizować

Dlatego ostatecznym terminem zakończenia jest listopad 2022 r.: do tego czasu cały kod PHP musi być zgodny z PHP 8, w przeciwnym razie istnieje niebezpieczeństwo utknięcia na potencjalnie podatnej wersji PHP.

Wniosek

PHP 8 będzie zawierało wiele przełomowych zmian. W naszym raporcie opisaliśmy wiele tych zmian, które, jak zakładają nasi eksperci, będą miały większy wpływ na WordPressa poza szerszym ekosystemem WordPressa. Zazwyczaj mają do czynienia z ostrzeżeniami, które stają się problemami. Wprowadzono kilka błędów, z którymi trudno sobie poradzić. Możesz wykryć większy procent tych zmian w czasie wykonywania.

Naprawienie wszystkich tych problemów ze zgodnością to ogromne zadanie. Aby to osiągnąć, musisz użyć różnych strategii, począwszy od analizy statycznej do testów automatycznych. To wymaga ogromnego czasu + wysiłku.

Powinieneś mieć prawo do narzędzia, aby wszystko przeprowadzić perfekcyjnie. W przypadku projektów takich jak WordPress, które muszą obsługiwać różne wersje PHP, wprowadzono kilka dodatkowych komplikacji w żonglowaniu różnymi wersjami narzędzi analitycznych, jak omówiliśmy powyżej.

Z pewnością staje się to dość trudne ze względu na różnice w czasie wykonywania i składni między PHP 5 i 8, które są tak niewiarygodnie ogromne.

Czy korzystanie z PHP 8 na WordPressie jest dobre, czy nie? Właściwie to nie jest tutaj argument. Jedyny wniosek jest taki – robienie tego staje się bardzo trudne.

Rozważyliśmy również kwestię zasięgu i zależności PHP od WordPressa. Jeśli chcesz niezawodnie wykryć zgodność, konieczne okaże się wysokie pokrycie testami. A mówiąc o PHP 8, jest to jeszcze ważniejsze, ponieważ liczba problemów ze zgodnością jest wyższa niż zwykle. Większość z nich można wykryć już w czasie wykonywania.

Co więc radzimy?

W przypadku wykrycia problemów wymagane jest szeroko zakrojone debugowanie, aby znaleźć źródło problemu, bez względu na to, czy jest to WordPress, motyw, wtyczka, czy jest bezpośrednio powiązane z kompatybilnością PHP.

Pokrycie testowe jest praktycznie nieobecne w przypadku zależności i niskie. Dlatego też trudno powiedzieć, czym jest zgodność rdzenia WordPressa z PHP 8 w prawdziwym tego słowa znaczeniu.

Ze względu na to, że PHP 8 koncentruje się tak głęboko na ścisłym typowaniu, system rozszerzalności typów niebezpiecznych WP staje się bardziej podatny na problemy, potencjalnie prowadząc do wtyczek generujących błędy typu w innych wtyczkach lub samym WP.

Przetestowaliśmy to, przeprowadzając analizę danych o błędach z ostatniego miesiąca. Jako ogromna witryna, uznaliśmy, że może ona wyraźnie wskazywać na rodzaje problemów, których możemy się spodziewać. Z pewnością znaleźliśmy kilka ostrzeżeń, które przekształcą się w błędy w PHP 8.

Wolimy zrobić tutaj ostatnią notatkę. WordPress nie jest jedyną dostępną starszą bazą kodu. Ponadto nie jest to jedyny projekt, który ma na celu obsługę ogromnej liczby wersji PHP. Informacje zawarte w tym artykule mogą również odnosić się do innych projektów.

Głównym celem tego artykułu z Accuweb jest poinformowanie i dokonanie przeglądu wyzwań i problemów związanych z kompatybilnością PHP 8 w WP. Mamy wielką nadzieję, że doskonale służy temu celowi.