Skript nevrátí nulu, jak byste asi čekali, ale nějaké sice hodně malé, ale přesto nenulové číslo. Kdybyste se spoléhali na to, že skript vrátí nulu, dostanete se do potíží. Takové chyby se navíc velmi špatně odhalují. A když se ještě k tomu nepřesná čísla uloží do databáze, mohou se chyby kumulovat.
7.2.4 Názvy proměnných Protože můžete použít malá nebo velká písmena a českou abecedu v názvech proměnných, a protože proměnných můžete mít časem i v jednom skriptu poměrně dost, vyplatí se již od začátku si v jejich pojmenování udělat nějaký systém. Těžko je konkrétně radit, ale následující postřehy vám možná přijdou vhod: ❚ J ednopísmenné názvy nebývají to nejlepší. Jak budete časem vědět, k čemu slouží proměnná $d či $g? ❚ P říliš dlouhé názvy také nejsou to pravé ořechové. Když máte napsat $jednaodvesnatrojuhelniku + $druhaodvesnatrojuhelniku, půjde to pomalu a můžete snadněji udělat překlep. ❚ P okud používáte sebe popisující názvy proměnných, bývá dobré se rozhodnout pro češtinu nebo jiný jazyk, ale nemíchat to. Například $tata+$mama=$dite ale ne $tata+$mama=$child. ❚ K dyž už musí být název proměnné dlouhý, udělá občas nějaké to velké písmeno situaci snesitelnější. $smazsouborzdisku není tak čtivé jako $SmazSouborZDisku případně $smaz_soubor_z_disku. ❚ N ěkdo si proměnné označuje prefixem podle typu. Celočíselné třeba $intPocet, řetězce $strNazev a podobně.
7.2.5 Přetypování proměnných PHP nevyžaduje definici proměnné před jejím použitím. Typ proměnné je v zásadě určen tím, co do ní vložíme. Co když ale výsledkem výrazu bude v PHP něco, co má jiný datový typ? Například, co se stane, když budeme dělit dvě celá čísla? Odpověď je – PHP se pokusí provést tzv. přetypování. Přetypování je změna typu proměnné během provádění programu. Připomeňme ještě na úvod, že proměnné v PHP mohou být čtyř základních typů: Integer, Float, Boolean a String. S přetypováním může být legrace. Především ale přetypovat proměnnou můžeme sami. Slouží k tomu příkaz settype, který nenávratně změní typ proměnné na jiný. Další důležitá informace je ta, že můžeme kdykoli zjistit typ proměnné pomocí funkce gettype. Tyto věci ilustrujme na příkladu: <? $muj_string="Pepa"; $muj_integer=2; $muj_float=3.5; $muj_boolean=FALSE; // pokusíme se nějak přetypovat každou proměnnou echo "Typ proměnné muj_string byl <B>".gettype($muj_string)."</B>"; echo " a hodnota byla <B>".$muj_string."</B>."; settype($muj_string, "boolean"); echo "Po změně na <B>".gettype($muj_string)."</B> je hodnota <B>". $muj_string."</B>.<BR>\n"; echo "Typ proměnné muj_integer byl <B>".gettype($muj_integer). "</B>"; echo " a hodnota byla <B>".$muj_integer."</B>. "; settype($muj_integer, "float"); echo "Po změně na <B>".gettype($muj_integer)."</B> je hodnota <B>".$muj_integer."</B>.<BR>\n";
98 PHP 6 – začínáme programovat
Ukázka elektronické knihy, UID: KOS182774
echo "Typ proměnné muj_float byl <B>".gettype($muj_float)."</B>"; echo " a hodnota byla <B>".$muj_float."</B>. "; settype($muj_float, "integer"); echo "Po změně na <B>".gettype($muj_float)."</B> je hodnota <B>". $muj_float."</B>.<BR>\n"; echo "Typ proměnné muj_boolean byl <B>".gettype($muj_boolean). "</B>"; echo " a hodnota byla <B>".$muj_boolean."</B>. "; settype($muj_boolean, "integer"); echo "Po změně na <B>".gettype($muj_boolean)."</B> je hodnota <B>".$muj_boolean."</B>.<BR>\n"; ?> Kód je to trošku delší, takže si zaslouží komentář. Nejprve jsme si vytvořili čtyři proměnné a naplnili jsme je takovými hodnotami, které reprezentují 4 základní datové typy. Potom děláme čtyřikrát totéž – nejprve vypíšeme "starý" typ a hodnotu proměnné pomocí gettype, pak ji přetypujeme a vypíšeme typ a hodnotu novou. Další věc, kterou byste si měli uvědomit, je ta, že PHP může přetypovat samo. Zvažme následující situaci: <?
$cislo=5; echo "Typ je ".gettype($cislo)."<BR>\n"; $cislo/=2; echo "Teď je typ ".gettype($cislo)."<BR>\n";
?>
Tady jsme pětku dělili dvojkou, což vedlo k tomu, že z výsledku, a tudíž ze samotné proměnné $cislo, se stal typ float.
Související funkce Někdy může být užitečné změnit typ proměnné jen na chvilku a pak ji zase používat starým způsobem. Toho dosáhneme tak, že před název proměnné napíšeme do závorky, jaký typ by v okamžiku vyhodnocení měla mít. Když si vypůjčíme část kódu z prvního příkladu a trochu to rozšíříme, bude to vypadat takto: <? $muj_float=3.5; echo "Typ proměnné muj_float byl <B>".gettype($muj_float)."</B>"; echo " a hodnota byla <B>".$muj_float."</B>.<BR>\n"; echo "Na řetězec ->".(string)$muj_float."<BR>\n"; echo "Na celé číslo ->".(int)$muj_float."<BR>\n"; echo "Na boolean ->".(boolean)$muj_float."<BR>\n"; echo "Po všech těch změnách je ale typ proměnné stále <B>". gettype($muj_float)."</B> a hodnota <B>".$muj_float."</B>.<BR>\n"; ?> Kromě funkce gettype, která vrátí řetězec obsahující název typu proměnné, existuje ještě sada funkcí, které vrací TRUE v případě, že proměnná je odpovídajícího typu. Existují tedy funkce is_ bool, is_integer, is_string a is_float.
Základy strukturálního PHP 99
Ukázka elektronické knihy, UID: KOS182774
Poznámky k přetypování ❚ J elikož příkaz echo vyžaduje řetězce, jsou proměnné před tiskem zkonvertovány. Logická hodnota FALSE vrací prázdný řetězec. ❚ P ři konverzi na logický typ pamatujte na to, že všechno kromě nuly a prázdného řetězce je považováno za TRUE. ❚ B uďte rozumní. Pokud si nejste jisti, že ve vašem kódu budou fungovat automatické konverze, konvertujte ručně, nebo testujte typ proměnné. ❚ F unkci gettype byste podle nápovědy k PHP měli používat s rozmyslem, protože je pomalá a v dalších verzích PHP se může měnit.
7.3 Výrazy, konstanty a operátory Výrazem je v PHP zhruba řečeno "všechno, co má nějakou hodnotu". Tak například v části věnované proměnným jsme uvedli, že proměnná má hodnotu; je to tedy výraz. Způsobu, jak zajistit že proměnná bude mít svou hodnotu, říkáme přiřazení. Pro osvěžení uveďme několik přiřazení: <? $jazyk="PHP"; $verze=4; $verzejazyka=$verze; echo $verzejazyka; ?> Zajímavý je třetí řádek – vidíme, že do proměnné můžeme přiřadit hodnotu jiné proměnné a celé to bude fungovat. Proměnné však nejsou jedinými kandidáty na výrazy v PHP. Další jsou konstanty. Konstanta je v PHP něco jako proměnná, ale během programu svou hodnotu nemění. Je zvyk psát jejich názvy velkými písmeny. Konstanty se definují pomocí funkce define. Dělá se to typicky na začátku skriptu: <? define ("BROWSER", "Firefox 1.0"); define ("OS", "GNU/Linux"); echo "Váš browser je ".BROWSER." a Váš systém je ".OS; ?> Konstanty se v PHP používají často; třeba na konfigurační části programu a podobně. Před názvem konstanty v PHP není znak dolaru ($). Konstanta je výraz.
7.3.1 Výrazy a přiřazení Výraz nemusí být jen řetězec. Prostě výraz je cokoli, co má hodnotu. Celé pole může být například také chápáno jako výraz. O funkcích jsme ještě nehovořili. Funkce ovšem je výraz, protože vrací hodnotu. Následující kód obsahuje praktický příklad: <? $dnesnidatum = Date("d.m.Y"); echo $dnesnidatum; ?> V této ukázce jsme udělali vlastně dvě věci: Za prvé – zavolali jsme funkci Date, která je výrazem. A za druhé, tento výraz jsme přiřadili výrazu $dnesnidatum a ten jsme vytiskli. Přiřazení, je také výraz. Samo přiřazení hodnoty proměnné je chápáno jako výraz a je vyhodnoceno jako přiřazovaná hodnota. Takže, následující tři zápisy jsou rovnocenné.
100 PHP 6 – začínáme programovat
Ukázka elektronické knihy, UID: KOS182774