Assoziative Arrays in PHP 7

Wie vor ein paar Tagen angekündigt, werden wir demnächst die alte PHP-Version 5 deaktivieren.

Der Umstieg auf die neuere Version PHP 7 ist im Allgemeinen problemlos möglich, jedoch kommt es gegebenenfalls zu Problemen mit assoziativen Arrays, die in PHP 7 leicht anders deklariert werden müssen.

Bei assoziativen Arrays, auf dessen Values man nicht mit einem numerischen Keys á la $user[0] oder $user[1] zugreift, sondern Namen dafür benutzt (zum Beispiel: $user[id] oder $user[name]), so führt dies in PHP 7 zu einer Warnung im Logfile:

PHP Warning: Use of undefined constant name – assumed ’name‘ (this will throw an Error in a future version of PHP)

Aus dieser alten Notation:

$user[name]

Sollte für PHP 7 also diese Notation werden:

$user['name']

Um nicht händisch via Suchen & Ersetzen durch alle Codefiles gehen zu müssen, kann man sich mit diesem regulären Ausdruck die Arbeit vereinfachen:

RegEx-Ausdruck für assoziative Arrays in PHP 7

Mit einem einfachen regulären Ausdruck kann man sich viel Handarbeit im Code ersparen:

Suchen nach:

\[([a-zA-Z]+)\]

Ersetzen mit:

\['\1'\]

Das Suchmuster sucht nach den öffnenden und schließenden eckigen Klammern von Arrays [ + ] und prüft, ob darin alphabetische Zeichen von a bis z oder A bis Z drin vorkommen (mindestens eines, aber beliebig viele).

Lässt man das einmal über alle seine Daten laufen, sind die assoziativen Arrays korrekt ausgezeichnet. Ältere PHP-Versionen haben über diese, eigentlich falsche, Notation noch gütig hinweggesehen, aber bald ist es damit vorbei und die warning messages sind ein erstes Anzeichen dafür.

Apostroph escapen

Man muss natürlich kein Apostroph nehmen, normale Anführungszeichen eignen sich dafür auch. Nutzt man als Array-Index beispielsweise einen Namen, der ein Apostroph enthält (Ku’damm) ist es einfacher, direkt auf Anführungszeichen auszuweichen.

Nutzt man Apostrophe, kann man die in den values enthaltenen Apostrophe auch escapen: Ku\‘damm.

Kommentarbenachrichtigungen
Benachrichtigung bei
0 Kommentare
Inline Feedbacks
Alle Kommentare anzeigen