Ein Upgrade auf PHP 7.0 konnte bei älteren Scripten mitunter einiges an Anpassungsarbeiten verursachen, wenn dort z.b. noch die veraltete MySQL-Schnittstelle verwendet wurde. Auch PHP 7.1 beinhaltet einige abwärtsinkompatiblen Änderungen, so dass auch hier ein Testen vor dem Upgrade angesagt ist. Ein Fehler, dem ich inzwischen häufiger (im Code anderer Programmierer) begegnet bin, ist die Initiierung eines Arrays mit einem leeren String. In PHP 7.1 kann dies nun dazu führen, dass das betreffende PHP-Script nicht weiter ausgeführt wird:
<?php
$foo = '';
$foo[] = 'bar';
Wird mit [] ein erstes Element hinzugefügt, löst dieses in PHP 7.1 einen Fatal Error aus:
PHP Fatal error: Uncaught Error: [] operator not supported for strings
Wenn $foo dagegen weiter oben, wie es sich gehört, als Array initiiert wird, verschwindet die Fehlermeldung:
<?php
$foo = array();
$foo[] = 'bar';
Kommentare
Das erste Codestück ist auch für ältere PHP-Versionen falsch. Man initialisiert das foo als string. Dann will man es wie ein Array behandeln, was nicht geht. Das sollte aber auch PHP5 ankreiden. Das erste Beispiel wäre richtig wenn foo = [] initialisiert wäre.
Richtig ist dagegen das zweite Beispiel.
Mit dem „sollte“ bin ich durchaus einig mit dir PHP 5 war da aber wohl noch toleranter – vor PHP 7.1 wurde ein String in so einem Fall automatisch in ein Array konvertiert, siehe Anmerkung im PHP-Manual:
Ich habe das grad nochmal unter PHP 5.6 getestet: „Silently“ bedeutet hier in der Tat, dass nicht einmal eine Notice ausgegeben wird.
Okay, das habe ich nicht gewusst oder vielleicht vergessen. Tatsächlich habe ich immer versucht die Variablen korrekt zu initialisieren. Normalerweise sollte man dann nicht auf die Idee kommen, so wie im ersten Beispiel zu handeln. Was für ein Glück das es jetzt PHP7 gibt