Typen-Tricks

PHP erfordert (bzw. unterstützt) keine explizite Typ-Definitionen bei der Deklaration von Variablen; der Typ einer Variablen wird durch den Zusammenhang bestimmt in dem die Variable benutzt wird. Das bedeutet, dass bei der Zuweisung einer Zeichenkette / eines Strings zu einer Variablen var diese Variable var zum Typ String wird. Sollten Sie dananch der Variablen var einen Integer-Wert zuweisen, wird sie zu einem Integer-Typ.

Ein Beispiel für die automatische Typ-Konvertierung von PHP ist der Plus-Operator '+'. Ist einer der zu addierenden Werte vom Typ float, werden alle Werte als float-Typ gbehandelt. Auch das Ergebnis der Addition wird vom Typ float sein. Andernfalls werden die Werte als integer-Typen angesehen und das Ergebnis wird ebenfalls vom Typ Integer sein. Beachten Sie, dass hierdurch NICHT der Typ der Operanden selbst beeinflusst wird; der Unterschied liegt einzig und allein in der Auswertung dieser Operanden.

$foo = "0";                         // $foo ist vom Typ String (ASCII 48)
$foo += 2;                          // $foo ist jetzt vom Typ Integer (2)
$foo = $foo + 1.3;                  // $foo ist nun vom Typ float (3.3)
$foo = 5 + "10 Sehr kleine Ferkel"; // $foo ist vom Typ Integer (15)
$foo = 5 + "10 Kleine Schweine";    // $foo ist vom Typ Integer (15)

Wenn Ihnen die beiden letzten Beispiele merkwürdig erscheinen, beachten Sie die String-Umwandlung.

Wenn Sie die Auswertung einer Variablen als einen speziellen Typ erzwingen wollen, beachten sie den Abschnitt in Typ-Umwandlung. Wollen Sie den Typ einer Variable ändern, schauen Sie bei settype() nach.

Um die Beispiele dieses Kapitels auszuprobieren, können Sie die Funktion var_dump() verwenden.

Anmerkung: Das Verhalten einer automatischen Umwandlung zum Typ Array ist zur Zeit nicht definiert.

$a = 1;       // $a ist ein Integer-Wert
$a[0] = "f";  // $a wird zum Array, $a[0] enthält "f"

Weil das o.a. Beispiel so aussieht, als ob $a ein Array wird, dessen erstes Element ein 'f' enthält, bedenken Sie folgendes:

$a = "1";     // $a ist ein String
$a[0] = "f";  // Was ist mit den String-Offsets? Was passiert?

Weil PHP die Indizierung innerhalb von Strings mittels der gleichen Syntax wie bei der Array-Indizierung unterstützt, führt das o.a. Beispiel zu einem Problem: Soll $a zu einem Array werden, dessen erstes Element ein "f" ist oder soll "f" das erste Zeichen des Strings $a werden?

Aus diesem Grund ist das Ergebnis der automatischen Umwandlung seit PHP 3.0.12 und auch in PHP 4.0b3-RC4 nicht definiert. Lösungen werden noch dikutiert.

Typ-Umwandlung

Typ-Umwandlung in PHP funktioniert vielfach wie in C: Der Name des gewünschten Typs wird vor der umzuwandelnden Variablen in Klammern gesetzt.

$foo = 10;           // $foo ist ein Integer-Wert
$bar = (float) $foo; // $bar ist vom Typ float

Folgende Umwandlungen sind möglich:

Anmerkung: Ansttat eine Variable in einen String umzuwandeln, können Sie die Variable auch in doppelte Anführungszeichen einschließen.

Beachten sie, dass Tabulatoren und Leerzeichen innerhalb der Klammern erlaubt sind. Deshalb sind die folgenden Beispiele identisch:

$foo = (int) $bar;
$foo = ( int ) $bar;

Es ist nicht immer offenkundig, was bei der Typ-Umwandlung geschieht. Für weitere Informationen schauen Sie unter folgenden Abschnitten nach:

Wenn Sie eine Umwandlung eines Arrays zu einem String vornehmen oder erzwingen, ist das Ergebnis das Wort Array. Wenn Sie eine Umwandlung eines Objekts zu einem String vornehmen oder erzwingen, ist das Ergebnis das Wort Objekt.

Bei der Umwandlung einer skalaren oder String-Variablen zu einem Array wird die Variable das erste Element des Arrays:

$var = 'ciao';
$arr = (array) $var;
echo $arr[0];        // gibt 'ciao' aus

Sobald eine skalare oder String-Variable in ein Objekt gewandelt wird, wird die Variable zu einem Attribut des Objekts; der Eigenschafts-Name wird 'scalar':

$var = 'ciao';
$obj = (object) $var;
echo $obj->scalar;   // gibt 'ciao' aus