Drucken
01. Juni 2009

Unterschiede zwischen PHP4 und PHP5

PHP5 bringt viele langersehnte Verbesserungen und schöne Neuerungen bei Details. Leider führen diese manchmal auch zu Problemen mit alten Skripten.

Folgende reservierte Schlüsselwörter sind in PHP5 neu: abstract, catch, clone, final, goto, implements, interface, instanceof, namespace, private, protected, public, throw, try, ___DIR___, __NAMESPACE__
Weggefallen sind dagegen die Schlüsselwörter old_function und cfunction.

strpos() und strripos() suchen jetzt nach dem ganzen Needle-String und nicht mehr nur nach dessen erstem Zeichen.

Nicht erlaubte Benutzung eines Offsets bei Zeichenketten führt seit PHP5 zu einem E_ERROR statt wie früher nur zu einem E_WARNING. So zum Beispiel bei $str = 'abc'; unset($str[0]);

array_merge() und array_merge_recursive() akzeptieren als Parameter nur noch Arrays. Bei jedem anderen Parametertyp wird ein E_WARNING generiert und ein leeres Array als Ergebnis zurück gegeben.

Die Konstante T_ML_COMMENT wird nicht mehr durch die Tokenizer-Extension zur Verfügung gestellt. Sie wurde zwar nie offiziell benutzt, war aber in PHP4 definiert.

Ein Object ohne Properties wird nicht mehr als empty angesehen.

get_class(), get_parent_class() und get_class_methods() liefern den Namen der Klasse/Methode so zurück wie sie angegeben wurden (mit der exakt-gleichen Groß-/Kleinschreibung). Dies kann in älteren Skripten zu Problemen führen, wenn diese sich auf das alte Verhalten, den Klassen-/Methodennamen komplett in Kleinbuchstaben zurück zu geben, verlassen. Eine Mögliche Abhilfe kann sein, in den Skriptdateien nach den Funktionsnamen zu suchen und strtolower() einzubauen. Die magisch vordefinierten Konstanten __CLASS__, __METHOD__, und __FUNCTION__ sind von dem Übergang zur Groß-/Kleinschreibung auch betroffen.

ip2long() gibt in PHP5 false zurück wenn eine ungültige IP-Adresse der Funktion als Argument übergeben wird, nicht mehr -1.

Wenn in einer include-Datei Funktionen deklariert werden können diese in der einbindenden Datei, unabhängig davon ob sie vor oder nach einem return() stehen, benutzt werden. Wenn eine Datei mit Funktionsdeklarationen zweimal eingebunden wird gibt PHP5 einen fatal error aus, weil die Funktionen schon deklariert waren, während sich PHP4 nicht beschwert hat. Es ist besser solche Dateien mit include_once() einzubinden.

Genauere Informationen zu den Neuerungen finden Sie auf Englisch unter php.net/manual/en/migration5.incompatible.php

Wenn eine von Ihnen eingesetzte PHP-Anwendung wie z.B. Joomla, Typo3, phpBB oder Gallery2 plötzlich Fehlermeldungen ausspuckt lohnt sich mit hoher Wahrscheinlichkeit ein Update auf die jeweils aktuelle Version. Neue Typo3 Versionen setzen PHP5 sogar zwingend voraus.