Typen-Tricks

PHP erfordert (bzw. unterstützt) keine explizite Typ-Definitionen bei der Deklaration von Variablen; der Typ einer Variablen wird bestimmt durch den Zusammenhang in dem die Variable benutzt wird. Das bedeutet, dass bei der Zuweisung einer Zeichenkette / eines Strings zu einer Variablen var diese Variable var den Typ String erhält. 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 double, werden alle Werte als double-Typ gehandhabt. Auch das Ergebnis der Addition wird vom Typ double sein. Ist dies nicht der Fall, werden Werte als Integer-Typen angesehen und das Ergebnis wird ebenfalls vom Typ Integer sein. Beachten sie, dass hierdurch nicht der Typ der Additions-Elemente selbst beeinflusst wird; der Unterschied liegt einzig und allein in der Auswertung dieser Elemente.


$foo = "0";  // $foo ist vom Typ String (ASCII 48)
$foo++;      // $foo ist immer noch vom Typ String,
                Inhalt "1" (ASCII 49)
$foo += 1;   // $foo ist jetzt vom Typ Integer (2)
$foo = $foo + 1.3;  // $foo ist nun vom Typ double (3.3)
$foo = 5 + "10 Little Piggies"; // $foo ist vom Typ Integer (15)
$foo = 5 + "10 Small Pigs";     // $foo ist vom Typ Integer (15)
     

Wenn für sie die letzten beiden Beispiele gleich sind, beachten sie String-Umwandlung.

Wenn sie die Auswertung einer Variablen als ein spezieller Typ erzwingen wollen, beachten sie den Abschnitt in Typ-Umwandlung. Wenn sie den Typ einer Variablen wechseln wollen, sehen sie bitte settype() nach.

Um die Beispiele dieses Kapitels auszuprobieren, können sie diese per "Copy und Paste" übertragen und die folgende Zeile einfügen, um zu sehen, was passiert:


echo "\$foo==$foo; ist vom Typ " . gettype( $foo ) . "<br>\n";
     

Anmerkung: Das Verhalten einer automatischen Umwandlung ist zur Zeit undefiniert.


$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, beachten 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 undefiniert. Lösungen werden noch dikutiert.

Typ-Umwandlung

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


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

Folgende Umwandlungen sind möglich:

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


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

Es ist nicht immer offenkundig, was bei der Typ-Umwandlung geschieht. Zum besseren Verständnis sollte das Folgende beachtet werden:

Bei der Umwandlung einer skalaren oder String-Variablen 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