PHP (8) - Výrazy, konstanty, inkrementace
Jazyk PHP je orientován na výrazy. Dnes si v našem
seriálu ukážeme co výrazy jsou a jak nám při programování budou pomocí. Zmíníme se rovněž o konstantách a inkrementaci.
7.6.2004 15:00 |
Petr Zajíc
| Články autora
| přečteno 145055×
Výrazem je v PHP zhruba řečeno "všechno, co má nějakou hodnotu". Tak
například v díle o proměnných 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.
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.
Viz příklad níže.
<?
define ("BROWSER", "Firefox 1.0");
define ("OS", "GNU/Linux");
echo "Váš browser je ".BROWSER." a Váš systém je ".OS;
?>
(kéžby...) 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.
Další výrazy
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 v našem seriálu sice ještě nehovořili, ale v díle
druhém jsme si již ukázali funkci Date. Funkce JE výraz, protože vrací
hodnotu. Následující kód obsahuje praktický příklad:
<?
$dnesnidatum = Date("r");
echo $dnesnidatum;
?>
V tétu 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. Celé by to šlo zkrátit na
<?echo Date("r");?>
ale to bychom přišli o proměnnou $dnesnidatum. Vůbec nevadí, že
Date() se každou chvíli mění; pro nás je to výraz, protože "to" vrací
hodnotu.
Pozn: Funkcím, které vracejí
pokaždé jinou hodnotu (například v závislosti na čase) se říká
nedeterministické. Funkcím, které pokaždé vrátí totéž, se naopak říká
deterministické. Oba typy jsou výrazy.
Přiřazení je 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é.
<?
// mohu přiřadit postupně
$kapsa1="prázdná"; $kapsa2="prázdná";
// nebo $kapsa1 a hned taky $kapsa2
$kapsa2=($kapsa1="prázdná");
// závorky ale můžu vynechat
$kapsa2=$kapsa1="prázdná";
echo "Jedna kapsa ".$kapsa1." a druhá kapsa taky ".$kapsa2;
?>
Vůbec nic nám nebrání měnit hodnotu výrazu pomocí jeho samotného,
takže následující zápisy jsou platné:
<?
$bajtu = 0;
$bajtu = $bajtu + 100;
$bajtu = $bajtu * 2;
$bajtu = $bajtu / 4;
echo $bajtu;
?>
Nebylo by to však PHP, kdyby nám nenabízelo jednodušší cestu, jak
něco takového napsat.
Preinkrementace a postinkrementace
Za těmito strašnými slovy se skrývá mechanismus, který mění hodnotu
výrazu pomocí něj samotného. Kdybychom napříkad chtěli zvednout počet
pokojů v našem bytě pomocí PHP, můžeme napsat:
<?
$pokoju=2;
$pokoju++;
echo $pokoju;
?>
nebo
<?
$pokoju=2;
++$pokoju;
echo $pokoju;
?>
Mezi těmito zápisy ve skutečnosti JE rozdíl, i když oba udělají z
našeho dvoupokojového bytu 3+1. Vysvětleme to tak, že hodnotu
inkrementovaného výrazu přiřadíme do další proměnné. Následující kód
<?
$pokoju=2;
$pokoju_po_zmene=$pokoju++;
echo $pokoju_po_zmene;
?>
vrátí dvojku, protože proměnná $pokoju se změnila až poté, co jsme
ji přiřadili proměnné $pokoju_po_zmene. Jedná se o postinkrementaci.
Ovšem kód
<?
$pokoju=2;
$pokoju_po_zmene=++$pokoju;
echo $pokoju_po_zmene;
?>
skončí trojkou, protože proměnnou $pokoju jsme měnili ještě předtím, než jsme ji přiřadili do
proměnné $pokoju_po_zmene. Jedná se tedy o preinkrementaci.
Časem Vám ovšem přestane i třípokojový byt stačit a tak se nabízí
otázka, zda pre(post)inkrementace umí měnit výraz o jinou hodnotu než
jen o jedničku. Ano, umí, takže náš příklad s bajty bychom mohli
přepsat jako:
<?
$bajtu = 0;
$bajtu += 100;
$bajtu *= 2;
$bajtu /= 4;
echo $bajtu;
?>
Funguje to i s řetězci, což se v praxi hojně používá. Když se má
například sestavit retězec, který se pošle jako příkaz do databáze,
většinou z toho vyleze něco dlouhého. Proto, a taky kvůli přehlednosti
bývá zvykem používat místo zápisu:
<?
$sql="select
id, nazev, prijmeni, jmeno, ulice, psc, mesto from zakaznik inner join
objednavka on zakaznik.id = objednavka.zakaznik where zakaznik.id =
7200";
?>
použít něco ve smyslu:
<?
$sql="select
id, nazev, prijmeni, jmeno, ulice, psc, mesto ";
$sql.="from zakaznik inner join objednavka on zakaznik.id =
objednavka.zakaznik ";
$sql.="where zakaznik.id = 7200";
?>
přičemž oba znamenají ve své podstatě totéž. Preinkrementaci a
postinkrementaci byste měli
používat, kdykoli je k tomu příležitost. Je totiž optimalizována na
rychlost. Na druhou stranu uznávám, že pokud přecházíte na PHP z
jazyků, které tuto konstrukci neměly (třeba asp), může Vám to zpočátku
dělat problém.
Různé kejkle s výrazy nás přivádějí k zajímavé otázce - a tou je
změna
typu proměnné. Jak to
například dopadne, když budeme proměnnou dělit?
Bude výsledkem typ celočíselný, desetinný nebo pokaždé jiný? Těmito
otázkami se budeme zabývat v dalším díle seriálu, věnovaném přetypování
proměnných.
Verze pro tisk
|
Nejsou žádné diskuzní příspěvky u dané položky.
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|