Forum und email

Typen-Tricks

PHP erfordert (bzw. unterstützt) keine expliziten 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 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 behandelt. 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.

<?php
$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 "10 Sehr kleine Ferkel"// $foo ist vom Typ Integer (15)
$foo "10 Kleine Schweine";    // $foo ist vom Typ Integer (15)
?>

Wenn Ihnen die beiden letzten Beispiele merkwürdig erscheinen, beachten Sie die Umwandlung von Strings in Zahlen.

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.

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

<?php
$a 
"1";     // $a ist ein String
$a[0] = "f";  // Was ist mit den String offsets? Was passiert?
?>

Weil PHP (aus historischen Gründen) 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?
Die aktuellen Versionen von PHP interpretieren die zweite Anweisung als Stringversatz-Kennung, weshalb $a zu "f" wird. Das Ergebnis dieser automatischen Umwandlung sollte jedoch als undefiniert betrachtet werden. Mit PHP 4 wurde die neue Syntax mit geschweiften Klammern eingeführt um auf Zeichen in einem String zuzugreifen. Verwenden Sie statt der oben vorgestellten Syntax folgende:
<?php
$a    
"abc"// $a ist ein String
$a{1} = "f";   // $a ist jetzt "afc"
?>
Für weitere Informationen siehe Abschnitt Zugriff auf Zeichen in Strings.

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.

<?php
$foo = 10;             // $foo ist ein Integer-Wert
$bar = (boolean) $foo; // $bar ist vom Typ boolean
?>

Folgende Umwandlungen sind möglich:

  • (int), (integer) - nach integer
  • (bool), (boolean) - nach boolean
  • (float), (double), (real) - nach float
  • (string) - nach string
  • (array) - nach array
  • (object) - Wandlung zum Objekt

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

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

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

<?php
$foo 
10;            // $foo ist ein Integer
$str "$foo";        // $str ist ein String
$fst = (string) $foo// $fst ist auch ein String

// Das gibt aus "sie sind gleich"
if ($fst === $str) {
    echo 
"sie sind gleich";
}
?>

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