Forum und email

Bűvészkedés a típusokkal

A PHP nem követeli meg (nem támogatja) az explicit típusdefiníciót a változók deklalárásakor; egy változó típusát a környezet határozza meg, amiben a változót használjuk. Vagyis ha egy stringet rendelünk $var -hoz, akkor $var string lesz. Ha ezután egy egészet rendelünk hozzá, $var egész lesz.

Egy példa a PHP automatikus típuskonverziójára az összeadás '+' operátora. Ha bármely operandusa lebegőpontos, akkor mindegyik operandusból lebegőpontos lesz, és az eredmény is az lesz. Máskülönben, ha az operandusok egészek, az eredmény is egész lesz. Figyeljünk azonban arra, hogy az operandusok típusát NEM változtatja meg; csupán a kiértékelés módját határozza meg.

<?php
$ize 
"0";                  // $ize egy string (ASCII 48)
$ize += 2;                   // $ize most egész (2)
$ize $ize 1.3;           // $ize most lebegőpontos (3.3)
$ize "10 Kis Pingvin"// $ize egész (15)
$ize "10 Kismalac";    // $ize egész (15)
?>

Ha az utolsó két példa furcsának tűnik, nézd meg a String konvertálása számmá című részt.

Ha egy változót adott típussal szeretnél használni egy kifejezésben, nézd meg a Típus konverziókat. Ha a változó típusát akarod megváltoztatni, használd a settype() függvényt.

Ha az ebben a fejezetben található példákat ki szeretnéd próbálni, használd a var_dump() függvényt a típusok és értékek kiírására.

Note: Egy tömb típusának automatikus konverziója jelenleg nem definiált.

<?php
$a 
"1";    // $a egy string
$a[0] = "f"// Mi van a string offsettel? Mi történik?
?>

Mivel a PHP (történeti okokból) támogatja, hogy a stringet, mint karakterek tömbjét kezeljük, és "beleindexeljünk" a fenti példa problémához vezet: $a-ból most tömb legyen, aminek az eleme "f", vagy a string első karaktere legyen "f"?
Több információért lásd a String karaktereinek elérése és módosítása című részt.
A PHP jelen verziói a második értékadást string offszet meghatározásaként értelmezik, így az $a értéke "f" lesz, mindamellet, hogy ennek a konverziónak az eredményét határozatlannak tekintjük. A PHP 4 bevezette a kapcsos zárójeles szintaxist a string karaktereinek elérésére, használd ezt a szintaxist a fent bemutatott helyett.
<?php
$a    
"abc"// $a string
$a{1} = "f";   // $a itt "afc"
?>

Típuskonverziók

PHP-ben a típuskonverzió úgy működik, mint C-ben: a kívánt típus nevét zárójelbe írjuk az elé a változó elé, amelyet cast-olni (konvertálni) akarunk.

<?php
$ize   
10;              // $ize egész
$bigyo = (boolean) $ize;  // $bigyo logikai
?>

A megengedett típusok:

  • (int), (integer) - egésszé konvertál
  • (bool), (boolean) - logikai értékké konvertál
  • (real), (double), (float) - lebegőpontos számmá konvertál
  • (string) - stringgé konvertál
  • (array) - tömbbé konvertál
  • (object) - objektummá konvertál

Megjegyzés: szóközök és tabulátorok megengedettek a string belsejében, tehát az alábbiak ugyanazt csinálják:

<?php
$ize 
= (int) $bigyo;
$ize = ( int ) $bigyo;

Note: Egy változót úgy is striggé konvertálhatsz, hogy dupla idézőjelek közé teszed.

<?php
$ize 
10;            // $ize is an integer
$str "$ize";        // $str is a string
$fst = (string) $ize// $fst is also a string

// Ez azt írja ki, hogy "azonosak"
if ($fst === $str) {
    echo 
"azonosak";
}
?>

Nem mindig tiszta, hogy mi történik, ha típusok közt cast-olunk [implicit cast]. További információkért lásd az alábbi fejezeteket: