Sam zacząłem uruchamiać Drupala 7 na PHP 5.4 z niewielkimi problemami w postaci powiadomień i ostrzeżeń.
Oprócz wersji 7.12 potrzebne będą te dwie łatki, aby rozwiązać problemy powodujące narzekanie na PHP:
http://drupal.org/files/menu-link-save-1338282-15-d7.patch
http://drupal.org/files/database-query-clone-1414412-11-d7_0.patch
Jedna z tych łat została już zastosowana do -dev, więc będzie w wersji 7.13, a druga prawdopodobnie wkrótce. We wszystkich przypadkach, o których mogę od razu pomyśleć, złą praktyką powodującą ostrzeżenia 5.4 było złe użycie klawiszy tablicy.
Pierwsza wersja tego wygląda następująco:
$some_key = function_call();
return $some_array[$some_key];
Czasami wywołanie funkcji zwróci tablicę lub obiekt, z których żaden nie jest prawidłowym kluczem tablicy. W PHP 5.3 to, co faktycznie się dzieje i po cichu wygląda następująco:
$some_key = function_call();
return $some_array[(string)$some_key];
PHP 5.4 ostrzega jednak, że może nie być to, czego chcesz. Druga wersja jest dokładnie taka sama, ale na odwrót.
$some_key = 'a_valid_key';
$may_be_a_string = function_call();
return $may_be_a_string[$some_key];
co daje komunikat o błędzie podobny do
Nielegalne przesunięcie ciągu „a_valid_key”
za każdym razem, gdy w $may_be_a_string
rzeczywistości jest łańcuchem, a nie tablicą, ponieważ jedynymi poprawnymi indeksami ciągów są liczby całkowite.
Ponieważ problemy są łatwe do zrozumienia, a poprawka jest (głównie) łatwa do zastosowania, zauważyłem, że w kilku przypadkach wersje -dev są już zaktualizowane lub łatki opublikowane w kolejce, które prawdopodobnie szybko się pojawią z powodu ich prosta natura.
Po kilku testach nie wydaje mi się, aby 5.4 było „niebezpieczne” do uruchomienia w produkcji, i zacząłem już wyświetlać na nim moje małe i osobiste strony. Zachęcam innych do zrobienia tego samego, abyśmy mogli uniknąć historycznie powolnego wdrażania nowych wersji PHP.
W chwili pisania tego tekstu najnowsza wersja APC, 3.1.9, nie działa z wersją 5.4. Z powodzeniem zbudowałem go i używałem z git.
Użycie APC prawdopodobnie zmniejszy wydajność aktualizacji wersji PHP, ale jej nie usunie.