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 = 5 + "10 Kis Pingvin"; // $ize egész (15)
$ize = 5 + "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: