Autor Zpráva
Shaim
Profil
Zdravím,

jaké použití doporučujete a proč? Všechny způsoby se mi zdají identické. Nejčitelnější se mi zdá $var2. Liší se to ještě nějak kromě čitelnosti?

<?php
$var1 = $var2 = $var3 = '5A#';
$var1 = intval($var1);
$var2 = (int) $var2;
settype($var3, 'integer');

var_dump($var2); // int(5)
var_dump($var2); // int(5)
var_dump($var3); // int(5)
?>

Děkuji.
ShiraNai7
Profil
Shaim:
jaké použití doporučujete a proč?

• Pokud potřebuješ přetypovat, použij type casting - tzn. (int). Je to jazykový kostrukt přesně pro tento účel.
• Použití intval() by se dalo obhájit potřebuješ-li pro převod uvést soustavu (druhý parametr intval()u).
settype() bych využil pouze v případě, kdy potřebuješ přetypovat dynamicky.

Liší se to ještě nějak kromě čitelnosti?

Každá možnost je trochu něco jiného:

(int) = jazykový konstrukt.
intval() = funkce s možností specifikace soustavy
settype() = funkce pro dynamické přetypování

Další rozdíl už bude snad jen v rychlosti:

(int) = 430ns (0.00043ms)
intval() = 4742ns (0.004742ms) (cca 11x pomalejší než (int))
settype() = 4906ns (0.004906ms) (o trochu pomalejší než intval())

Rozdíly nejsou tak velké, ale proč používat intval() (který má overhead kvůli tomu, že se jedná o volání funkce), když by stačil rychlejší a čitelnější (int).
Alphard
Profil
Pro malichernosti nevidíte asi nejzásadnější rozdíl. settype() přebírá proměnou jako referenci a mění původní proměnnou, tj. původní hodnota je ztracena. Zbylé dva způsoby zachovají původní proměnnou, jen vrátí její obsah po určité tranformaci.
Jan Tvrdík
Profil
Protože intval je funkce, lze ji použít jako callback.

$numbers = array_map('intval', $numbers);
Shaim
Profil
Děkuji pánové, na tomto webu jsem se dozvěděl už spoustu věcí a vždy mě to posune o kousek dál. Velké díky! :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: