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 .

© 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.

© 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 lesen

Chronologische Liste und Netflix-Links -

Neuerscheinungen in der Übersicht -

Vorschau auf Film- und Serien-Highlights -

Mehr zum Thema

Webdesign

Adobe Illustrator wird im Webdesign immer beliebter. Wie Sie das Tool richtig einsetzen, erfahren Sie hier.
Facebook

Was sind die Implikationen für Unternehmen und Endanwender bei Facebooks neuer Suche Graph Search?
Online-Recht

Allgemeine Geschäftsbedingungen liest sich niemand gerne durch. Sie sind jedoch notwendig und äußerst sinnvoll. Worauf sie achten sollten.
Online-Recht in der Cloud

Dateien werden immer häufiger in der Cloud bereitgestellt. Rechtlich ist das jedoch durchaus problematisch. Wir klären über das Urheberrecht in der…
E-Commerce-Logistik

Für den Erfolg eines Online-Shops sind zahlreiche Faktoren verantwortlich. Neben Produktvielfalt und Darstellung der Waren gehört auch die Logistik.