quakenet:#php Tutorial

Author: Progman, zuletzt bearbeitet von bigfoot @ 2004/11/27 13:48:05

Bitte beachten Sie, dass die Tutorialkapitel zusammenhängen. Wenn sie direkt auf ein Kapitel verlinkt wurden müssen Sie gegebenenfalls die vorherigen Kapitel auch lesen. Achten Sie beim lesen darauf, dass Sie kein Kapitel überspringen.

Typverarbeitung

  1. Typen in PHP
  2. Manuelles Umwandeln des Typs
  3. Typänderung mit settype()
  4. Automatisches Umwandeln
  5. Boolische Umwandlung

1. Typen in PHP

PHP kennt eine Menge von Variablentypen. Die, die wir kennengelernt haben sind string, int, float und boolean. In PHP ist es möglich den Typ einer Variable zu ändern oder den Wert einer Variablen als anderen Typ zurückzugeben. Dies macht PHP automatisch, kann aber auch manuell ausgeführt werden. Bei der Umformung versucht PHP den Wert so gut wie möglich umzuformen.

2. Manuelles Umwandeln des Typs

Wenn wir einen Ausdruck in einen anderen Typ umwandeln wollen schreiben wir vor diesem Ausdruck den Typ, indem wir den Ausdruck haben wollen, in Klammern. Dies sieht dann so aus.

<?php
    $foo
= 20;
    
var_dump($foo); // gibt int(20) aus
    
$bar = (float) $foo;
    
var_dump($bar); // gibt float(20) aus
?>

Hier wird der Wert von $foo in float umgewandelt und in $bar gespeicht. Die Variable $foo bleibt aber unverändert. $foo ist immernoch vom Typ int. Beim Umwandeln kann es zu Datenverlusten kommen, wenn man z.B. eine float-zahl in eine int-zahl verwandelt oder eine int-zahl in boolean umwandelt.

<?php
    $foo
= 3.1415;
    
var_dump($foo); // gibt float(3.1415) aus
    
$bar = (int) $foo;
    
var_dump($bar); // gibt int(3) aus
?>

PHP versucht hier die Zahl 3.1415 in einen Int-Ausdruck umzuwandeln. Da int-Zahlen aber nur ganze Zahlen beinhaltet tritt hier ein Datenverlust auf. PHP löscht bei dieser Umwandlung alle Zahlen hinter dem Komma. 2.4 wird zu 2, -3.4 wird zu -3, usw.

Wenn die float-Zahl schon so groß ist das sie beim Umwandeln nicht in eine Int-Zahl passen würde, dann entsteht beim Umwandeln von float zu int ein undefinierter Wert.

Bei der Umformung von String in float/int wandelt PHP nur eine am Anfang stehende Zahl in eine float/int-Zahl um. Wenn dies nicht möglich ist, z.B. weil der String mit einem Buchstaben anfängt, wandelt PHP den String in 0 um. Die Zeichen nach der 1. Zahl im String werden für die Weiterverarbeitung ignoriert.

<?php
    $var
= (int) "4";
    
var_dump($var);  // gibt "int(4)" aus
    
$var = (float) "4";
    
var_dump($var);  // gibt "float(4)" aus

    
$var = (int) "4.5";
    
var_dump($var);  // gibt "int(4)" aus
    
$var = (float) "4.5";
    
var_dump($var);  // gibt "float(4.5)" aus
    // Bei der Umwandlung in Int fallen die
    // Nachkommastellen weg

    
$var = (int) "4+5";
    
var_dump($var);  // gibt "int(4)" aus
    
$var = (float) "4+5";
    
var_dump($var);  // gibt "float(4)" aus
    // PHP erkennt nur die Ziffer 4 als Zahl. Es wird nicht, wie
    // erwartet, die Zahl 9 zurückgeliefert. Für PHP ist das "+"-Zeichen ein
    // Zeichen wie jedes andere, das nicht zur Zahl gehört

    
$var = (int) "4,5";
    
var_dump($var);  // gibt "int(4)" aus
    
$var = (float) "4,5";
    
var_dump($var);  // gibt "float(4)" aus
    // In PHP und in allen anderen Sprachen wird das
    // Komma durch einen Punkt markiert. Diese Umwandlung
    // ist so ähnlich wie die oben mit dem "+"-Zeichen


    
$var = (int) "ein Text";
    
var_dump($var);  // gibt "int(0)" aus
    
$var = (float) "ein Text";
    
var_dump($var);  // gibt "float(0)" aus
    // Einen Text ohne führende Zahl kann PHP nicht
    // umwandeln und liefert entsprechend 0 zurück

    
$var = (int) "     4";
    
var_dump($var);  // gibt "int(4)" aus
    
$var = (float) "      4";
    
var_dump($var);  // gibt "float(4)" aus
    // PHP ignoriert am Anfang stehende Leerzeichen
    // und wandelt dann den String in eine Zahl um

    
$var = (int) "4.5 Siege in diesem Jahr";
    
var_dump($var);  // gibt "int(4)" aus
    
$var = (float) "4.5 Siege in diesem Jahr";
    
var_dump($var);  // gibt "float(4.5)" aus
    // PHP ist der Text hinter der Zahl egal,
    // dieser Ignoriert er bei der Umwandlung einfach
?>

Die Umwandlung von int/float in String ist kein Problem. Dies schafft PHP ohne Probleme.

<?php
    $name
= (string) 5.6;
    
var_dump($name); // gibt 'string(3) "5.6"' aus
    // Wenn var_dump() eine String-Variable ausgibt
    // gibt var_dump() zusätzlich noch die Länge des Strings
    // (hier 3) mit aus, da Steuerzeichen und Leerzeichen
    // meißens nicht sofort erkennbar sind.
?>

Diese Technik, den Wert als anderen Typ zurückzugeben, nennt man Type-Casting.

3. Typänderung mit settype()

Mit settype können wir den Variablentyp einer Variable bearbeiten. Als 1. Parameter wird die Variable übergeben, als 2. Parameter den Typ (als String) den man haben möchte.

<?php
    $var
= 5.6;
    
var_dump($var);  // gibt "float(5.6)" aus
    
settype($var, "integer");
    
var_dump($var);  // gibt "int(5)" aus
?>

Bei dieser Umformung gelten die gleichen Umformungsregeln wie mit (typ). Das Beispiel oben kann auch mit dem oben erwähnten Typecasting verwirklicht werden.

<?php
    $var
= 5.6;
    
var_dump($var);  // gibt "float(5.6)" aus
    
$var = (int)$var;
    
var_dump($var);  // gibt "int(5)" aus
?>

Dies ist auch die einfachere und kürzere Variante als settype zu verwenden.

4. Automatisches Umwandeln

Um die Typumwandlung brauchen wir eigenlich keine Sorgen zu machen. Dies macht PHP, so weit wie möglich und wenn es erforderlich ist, automatisch. Dies kennen wir bereits vom Zusammenhängen von Strings und Variablen. Die Variablen werden in Strings umgewandelt und dann an den String gehängt.

<?php
    $variable
= 5.6;
    echo(
"string ".$variable." string");
?>

5. Boolische Umwandlung

Bei der Umwandlung in einen boolschen Wert gibt es bestimmte Fälle, wann ein Wert true oder false ergibt. Hier eine Auflistung der Werte, wann diese bei einer Umformung in bool den Wert false ergeben.

Alles andere ergibt bei der Umformung bool(true).

<?php
    
// Dies ergibt immer bool(false)
    
$var = (bool)0;
    
var_dump($var);
    
$var = (bool)0.0;
    
var_dump($var);
    
$var = (bool)"0";
    
var_dump($var);
    
$var = (bool)"";
    
var_dump($var);

    
// Dies ergibt immer bool(true)
    
$var = (bool)-1;     // -1 ist true, nicht false.
    // Wichtig bei if-abfragen, wo eine Funktion bei
    // einem Fehler die Zahl -1 zurückliefert
    
var_dump($var);
    
$var = (bool)0.0001; // ist nicht 0.0
    
var_dump($var);
    
$var = (bool)"0.0"; // (!) Ein String der nicht "0" oder "" ist
    
var_dump($var);
    
$var = (bool)"00";  // Der String ist "00", nicht "0"
    
var_dump($var);
?>

Dies erklärt auch das Phänomen mit if($username == "max" OR "müller" OR "heinz"), da die Strings "müller" und "heinz" in true umgewandelt werden und die If-Abfrage immer true ergibt.

Bei der Umformung von bool in int/float/string wird für true der Wert 1 genommen und für false der Wert 0.

<?php
    $var
= (int)true;
    
var_dump($var);  // gibt int(1) aus
    
$var = (float)true;
    
var_dump($var);  // gibt float(1) aus
    
$var = (string)true;
    
var_dump($var);  // gibt string(1) "1" aus
?>

Fragen zum aktuellen Thema

  1. Wie kann man den Typ einer Variablen ändern
Wie kann man den Typ einer Variablen ändern

Es gibt 2 Möglichkeiten den Typ einer Variablen zu ändern

  1. Man benutzt die Funktion settype um den Typ einer Variablen zu ändern. Als 1. Parameter gibt man die Variable an, die man bearbeiten möchte, als 2. Parameter gibt man den Typ (in einem String) an den man haben möchte.

  2. Man benutzt das Type-Casting, indem man den Typ, den man haben möchte, in Klammern vor einem Ausdruck schreibt und diesen Gesamtausdruck dann einer Variable zuweist. Dies kann auch die selbe Variable sein.

Nach oben