Jörgs Webnotizen

PHP 7.1: [] operator not supported for strings

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, der mir inzwischen häufiger untergekommen ist, 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';
Tags: PHP

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:

Note: As of PHP 7.1.0, applying the empty index operator on a string throws a fatal error. Formerly, the string was silently converted to an array.

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 :)

Kommentar schreiben

Erlaubte HTML-Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

* Pflichtfeld

Erstkommentare werden erst nach Freischaltung veröffentlicht