4, 5 oder 6?

Teil 2: Migration von PHP 4

Im Gegensatz zu den Short-Open-Tags taucht die Einbindung von PHP-Code mit Prozenzeichen <% %> kaum auf. Diese Variante wird in der php.ini mit asp_tag deaktiviert und sollte bei der Migration - sofern vorhanden - auf jeden Fall beseitigt werden.

Neben der Einbindung hat sich auch bei den Dateinamen ein bisschen was geändert. Die Commandozeilen-Version von PHP ist ins Hauptverzeichnis gewandert und heißt nun statt cli/php.exe nur noch php-cli.exe. Ebenfalls umbenannt wurden das Apache-Modul und die CGI-Variante von PHP .

Migration von PHP 4

© Archiv

In den meisten Fällen sind die Änderungen unproblematisch, da sie entweder beim Hoster auf eine bestehende Installation zugreifen, oder PHP 5 separat installieren.

Grundsätzliches

Eine der bedeutsamsten und problematischsten Änderungen bei der Migration ist der Wechsel bei der Übergabe von Objekten an Funktionen. In PHP 4 erfolgte dies als Wert. Das heißt, zwischen dem übergebenen Parameter und dem Original gab es keine Verbindung mehr. Optional konnte man per &-Operator als Referenz übergeben. In PHP 5 ist nun - wie in den meisten modernen objektorientierten Sprachen - die Übergabe als Referenz der Standard.

Um dieses Problem zu verstehen, sehen Sie sich zuerst ein sehr einfaches Beispiel an, wo eine Referenz eingesetzt wird:

<?php
$b = 2;
$a = &$b;
$b = 3;
echo $a; //3
echo $b; //3
?>

Hier erhält die Variable $a eine Referenz auf die Variable $b. Das heißt, beide Variablen verweisen auf denselben Wert. Egal, ob im Folgenden der Wert von $a oder $b geändert wird, die Änderung wirkt sich auf beide Variablen aus. Bei der Übergabe eines Wertes an den Parameter in einer Funktion wird dieser Wert in PHP 4 standardmäßig nicht als Referenz gehandhabt:

$a = 2;
$b = 3;
function summe($a, $b) {
$a += $b;
}
summe($a, $b);
echo $a; //2

Für alle einfachen Datentypen wie die Zahlen in diesem Beispiel ist das in PHP 5 genauso. Die Werte werden als Kopie abgelegt. Das heißt, im Hauptspeicher hält PHP den Wert der Variablen $a vor. Der Parameter $a in der Funktion ist ein davon getrennter Wert.

Migration von PHP 4

© Archiv

Der Wert der Eigenschaft unterscheidet sich in PHP 4 und PHP 5.

Dieses Verhalten können Sie für PHP 4 und 5 gleichermaßen ändern, indem Sie dem Parameter ein kaufmännisches Und voranstellen und damit anzeigen, dass es sich um eine Übergabe als Referenz handelt:

$a = 2;
$b = 3;
function summe(&$a, $b) {
$a += $b;
}
summe($a, $b);
echo $a; //2

Möglich ist auch die Angabe im Aufruf der Funktion. Die Übergabe als Referenz gilt dann nur für diesen Aufruf:

summe(&$a, $b);

Diese Variante ist allerdings nicht empfehlenswert, da dadurch schwer kontrollierbar ist, wann ein Parameter als Referenz und wann als Wert übergeben wird. Diese Übergabe zur Laufzeit (engl. call time) lässt sich dementsprechend mit der Option allow_call_time_pass_reference in der php.ini deaktivieren.

Nun aber zur geänderten Situation bei Objekten: Sehen Sie sich dieses Beispiel an.

class Werte {
public $value1 = 2;
public $value2 = 3;
}
$werteObj = new Werte();
function summe($werte) {
$werte->value1 += $werte->value2;
}
summe($werteObj);
echo $werteObj->value1;

Mehr zum Thema

Youtube Sperre umgehen GEMA
Videos freischalten

So umgehen Sie die GEMA-Sperre bei Youtube. Was Sie dazu brauchen, und wie es am einfachsten geht.
Neue Fritzboxen unterstützen den AC-Standard.
WLAN-Geschwindigkeit verdoppeln

Mehr WLAN-Geschwindigkeit: Mit dem WLAN-Standard 802.11ac und den richtigen Geräten und Einstellungen verdoppeln Sie den Datendurchsatz.
Netflix auf dem TV
Programm in der Übersicht

Welche Filme und Serien gibt es bei Netflix eigentlich zu sehen? Was ist neu im Streaming-Angebot? Diese Antworten helfen weiter.
Netflix
Streaming

Preise, kompatible Geräte, Datenrate, Serien- und Filmangebot von Netflix: Wir beantworten die wichtigsten Fragen rund um den Streaming-Dienst.
E.T. – Der Außerirdische
Vorschau auf Film- und Serien-Highlights

Amazon Prime Instant Video lockt im Dezember 2016 mit Film-Highlights wie "E.T.", "Fast & Furious 7" und der Serie "Ku’damm 56​".