SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=93&group=21
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Typumwandlung


Explizite Typumwandlung

Typumwandlung in PHP funktioniert oft wie in C. Der Name des gewünschten Typs wird vor der umzuwandelnden Variablen in Klammern gesetzt, dies wird auch als Cast-Operation bezeichnet.

Beispiel

<?php
// Integer
$zahl = 100;
// Float
$zahl = (float) $zahl;
// Ausgabe – float(100)
echo var_dump($zahl);
?>

Folgende Umwandlungen sind möglich:

Anstatt 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:

$zahl = (int) $zahl;
$zahl = ( int ) $zahl;

Es ist nicht immer offenkundig, was bei der Typumwandlung geschieht. Sollten 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 Stringvariablen zu einem Array wird die Variable das erste Element des Arrays:

<?php
$vorname = 'Caroline';
$personen = (array) $vorname;
// Ausgabe – Caroline
echo $personen[0];
?>

Sobald eine skalare oder Stringvariable in ein Objekt gewandelt wird, wird die Variable zu einem Attribut des Objekts; der Eigenschaftsname wird 'scalar':

<?php
$vorname = 'Caroline';
$obj = (object) $vorname;
// Ausgabe – Caroline
echo $obj->scalar;
?>

Bei der Umwandlung sollten Sie berücksichtigen, dass nicht sämtliche Richtungen sinnvoll sind. In der folgenden Tabelle stelle ich Ihnen sinnvolle mögliche Kombinationen vor.

ZieltypSinnvolle QuelltypenUnwandlungsprinzip
integer
int
doubleDezimale werden abgeschnitten (keine Rundung).
stringWird keine Zahl erkannt, wird 0 zurückgegeben.
double
real
integerunverändert
stringWird keine Zahl erkannt, wird 0 zurückgegeben.
stringintegerGibt die Zahl als Zeichenkette zurück.
doubleGibt die Zahl als Zeichenkette zurück.
arrayobjectWird direkt umgewandelt.
integerEs entsteht ein Array mit einem Element vom Ursprungstyp.
stringEs entsteht ein Array mit einem Element vom Ursprungstyp.
doubleEs entsteht ein Array mit einem Element vom Ursprungstyp.
objectarrayWird direkt umgewandelt.
integerEs entsteht ein Objekt mit einer Eigenschaft, die durch die Variable repräsentiert wird.
stringEs entsteht ein Objekt mit einer Eigenschaft, die durch die Variable repräsentiert wird.
doubleEs entsteht ein Objekt mit einer Eigenschaft, die durch die Variable repräsentiert wird.
{PSP}Zeichenkettenkonvertierung

Bei der Umwandlung von Zeichenketten wendet PHP bestimmte Regeln an. Mit deren Kenntnis können Sie das Ergebnis voraussagen und von der Umwandlung sicher Gebrauch machen:

Hinweis: Die Zeichen e und E dienen der Darstellung von Exponenten. Die Schreibweise Enn steht für x10nn. Generell dient der Punkt . als Dezimaltrennzeichen. Sie müssen dies bei Zuweisungen von Variablen berücksichtigen. Zur Ausgabe lassen sich Zahlen mit der Funktion number_format in die benötigte Form bringen (deutsche Schreibweise mit Komma).


Umwandlungsfunktion

Neben der Angabe des Datentyps als cast-Ausdruck kann auch die Funktion settype() eingesetzt werden. In manchen Ausdrücken wird eine Funktion erwartet, oft dient der Einsatz jedoch lediglich der besseren Lesbarkeit.

settype (string var, string type)

Der Typ der Variablen var wird festgelegt als type. Mögliche Werte für type sind:

Beispiel

<?php
$preis = 9.99;
settype($preis,"integer");
// Ausgabe (9)
echo $preis
?>

Beispiel

<?php
$preis = 9.99;
settype($preis,"object");
// Ausgabe Object id #1
echo $preis;
// Ausgabe (9.99)
echo $preis->scalar;
?>

Hinweis: Bei erfolgreicher Umwandlung liefert settype() TRUE, sonst FALSE. So haben Sie die Möglichkeit, auf eine fehlerhafte Umwandlung mithilfe einer Bedingung zu reagieren.

Beispiel

<?php
$preis = 9.99;
// Ausgabe (9)
if (settype($preis,"integer") == 1) {
echo $preis;
} else {
echo "Fehler!";
}
?>

Sollte Ihnen settype() zu umständlich sein, können Sie auch die abgeleiteten val-Funktionen verwenden:

Beispiel

<?php
$preis = 9.99;
// Ausgabe (9)
echo intval($preis);
?>