LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> 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 113614×

Komerční sdělení: Pořádáme Kurzy PHP

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

pridej.cz

 

DISKUZE

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ů

22.5.2013 6:46 /MaReK Olšavský
Svobodný software ve státní sféře nejsou jen vítězství, ale i mýty a pověry, které jej vylučují z výběru. 5 nejčastějších hloupostí o F/L/OSS zkritizoval Adam Firestone na stránkách OpenSource.com. Nesetkáváme se s podobnými argumenty i při snaze prosadit svobodný software ve firmách a u soukromých osob?
Přidat komentář

22.5.2013 6:46 /MaReK Olšavský
Embedovatelná databáze SQLite byla vydána ve verzi 3.7.17, která nabízí větší rychlost (v některých úlohách až dvojnásobnou), opravy několika chyb, nebo vylepšení možností nahrávání rozšíření. O SQLite se píše výrazně méně, než o konkurenci, ale velmi pravděpodobně jde o nejčastěji nasazené řešení, díky mnoha aplikacím.
Přidat komentář

22.5.2013 6:45 /MaReK Olšavský
14. května 2013 IBM oznámila konec vývoje Lotus SmartSuite , Lotus Organizer a Lotus 1-2-3, balíků aplikací, jež byly považovány za špičku v oboru. Krátký nekrolog za legendární Lotus 1-2-3, který byl vyvíjen 30 let, sepsal Steven J. Vaughan-Nichols.
Přidat komentář

21.5.2013 7:05 /MaReK Olšavský
Vydání nástupce kdysi velmi populární distribuce GNU/Linuxu, Mandrake/Mandrivy, Mageia již nebude dále odkládáno, s 2 měsíčním zpožděním vyšla Mageia 3. Z novinek vybíráme: KDE 4.10.2, GNOME 3.6, LibreOffice 4.03, nebo Steam pro Linux. Mageia patří mezi distribuce, které lze doporučit méně zkuženým uživatelům.
Přidat komentář

21.5.2013 7:05 /MaReK Olšavský
Chytré telefony s operačním systémem Sailfish OS (který vytváří společnost Jolla, jež vznikla z bývalých vývojářů Maema Nokie) se blíží uvedení na trh, předobjednávka s dodáním na konci roku 2013 a kompatibilita s Androidími aplikacemi ukazují na blízkost cíle. Rozhovor s Marcem Dillonem odhaluje mnohé z pozadí vývoje. Není bez zajímavosti, že první aplikace byla zveřejněna pouhých 29 minut po vydání SDK.
Přidat komentář

21.5.2013 7:05 /MaReK Olšavský
Z koupě populární služby Tumblr firmou Yahoo za 1,1 mld. US$ nemalou měrou těží svobodný Wordpress, jemuž narostl počet importovaných blogů z Tumblr přibližně 150×.
Přidat komentář

21.5.2013 7:05 /MaReK Olšavský
Ač se to mnohým může zdát neuvěřitelné, COBOL stále patří mezi živé jazyky. Firma IBM rozšířila jeho schopnosti o podporu XML a Javy 7, se současným nárůstem výkonu o 15—20 %.
Přidat komentář

20.5.2013 6:53 /MaReK Olšavský
Vývojářský tým NetBSD vydal verzi 6.1 operačního systému, jenž je portován pro drtivou většinu používaných platforem. Jelikož se jedná o upgrade stávající řady, přináší nová verze převážně jen opravy. V duchu oprav vydání vyšla i verze 6.0.2.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

18.5.2013 17:55 / Martin Kumst
Re: zaheslování bash scriptu nebo složky

18.5.2013 7:44 / ---
Re: Prosím o pomoc či radu

15.5.2013 19:21 / Filip Vaněček
Cesty k souborům při používání coolurl

13.5.2013 6:50 / Radim Kolář
Zabbix

8.5.2013 6:07 / MaReK Olšavský
Web Upd8

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2013) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze | zákony online