Jak už jsem minule zmínil, program v jazyce PHP vkládáme přímo do html stránek do tagu <script language=„php“>…</script>, případně <? … >, <?php … > nebo <% … %> (tyto další způsoby nemusí vždy fungovat, záleží na verzi PHP a konfiguraci). Jednotlivé příkazy oddělujeme středníkem tak jako v C; céčku je vlastně PHP podobné hodně – až na odlišný způsob práce s proměnnými. V následujících odstavcích se pokusím stručně rozebrat některé důležité aspekty jazyka z pohledu programátora, hlavně s ohledem na některé specifické vlastnosti PHP ve srovnání s běžnými programovacími jazyky. Samozřejmě nemá smysl zde opisovat manuál, tam najdete veškeré další podrobnosti – odkazy z tohoto článku vedou přímo na server php, kde je uživateli komentovaný manuál – velmi užitečná věc, je zde vysvětleno mnoho nedokumentovaných funkcí a vlastností PHP. Sám jsem tam už taky něco připsal :)
Proměnné
… se v jazyce PHP zapisují podobně jako v Perlu – $var – a nedeklarují se. Typ hodnoty proměnné se může libovolně měnit, záleží na posledním přiřazení (nic vám nebrání napsat něco takového: $a = 10; $a = ‚deset‘; Typ hodnoty proměnné zjistíte funkcí Gettype(). Kromě jednoduché hodnoty může proměnná obsahovat i několikarozměrné pole nebo odkaz na objekt. Podle viditelnosti můžeme proměnné rozdělit na globální a lokální – zde se PHP chová trochu jinak než ostatní jazyky, se kterými jsem se setkal. Lokální proměnné jsou přístupné pouze uvnitř definice funkce (a metody) – vlastně všechny proměnné uvnitř funkce jsou implicitně považovány za lokální; má-li funkce přistupovat přímo ke globální proměnné (každá použitá mimo definici funkce), musíte ji před použitím deklarovat global $var1, …, $var2 ; – podrobnosti najdete zde. Můžete dokonce proměnnou určit pomocí jiné proměnné – $var = ‚other_var‘; $$var = ‚Nazdar‘; echo $other_var;. K polím, objektům, objektovým proměnným, HTTP proměnným a parametrům funkcí se ještě vrátím.
Typy, výrazy, operátory
PHP umí pracovat s (jednoduchými) typy integer, double, string (podrobnosti) a v případě potřeby provádí automatickou konverzi typů – například $text = ‚100‘; $text = $text +20; echo $text; vytiskne (kupodivu pro mne) správně 120. Konverzi typu můžete provést také explicitně (tak jako v C) $var = ‚15‘; $var2 = (double) $var; nebo přímo funkcí Settype() – opět doporučuji podrobněji prostudovat. Kromě přiřazovacího operátoru = jsou v PHP i += -= .=, poslední z nich slouží ke spojování řetězců. Detaily k výrazům a operátorům najdete tady.
HTTP proměnné GET, POST a COOKIES
Jednou ze sympatických vlastností PHP je, že se nemusíte starat o přijetí proměnných GET a POST z formulářů – PHP je pro program automaticky zpřístupní jako globální proměnné. Totéž platí pro cookies, tedy sušenky :) Pokud potřebujete zjistit, zda byla hodnota z formuláře opravdu přijata, otestujte proměnnou na existenci funkcí Isset(). Jako proměnné formuláře můžete použít i jednorozměrná pole – to se hodí třeba v případě výběru několika hodnot prvkem select multiple. Automaticky byste měli mít k dispozici také proměnné prostředí, i když zde dokumentace doporučuje raději použití funkce getenv().
Jazykové konstrukce
Zde by vás PHP nemělo nijak překvapit. Je zde klasický if, for, while, switch tak jako v céčku:
while ($vek<60) { for ($mesic = 1; $mesic <=12; $mesic++) { if (! $marod) { makat($mesic); ... } else { valetse($mesic); ... } } $vek++ }
Uživatelské funkce umožňují nastavení default hodnot parametrů a umí předání parametru jak hodnotou, tak odkazem (pokud potřebujete, aby funkce mohla změnit obsah proměnné, předávané jako parametr). Funkce musí být definována dříve, než je poprvé použita. Podrobnosti k jazykovým konstrukcím najdete zde.
Pole
… mohou být jedno- i vícerozměrná a kromě přístupu k prvku pomocí indexu (číslováno od 0) můžete prvku pole přiřadit i „textový“ index. Pole nemusíte nějak zvlášť vytvářet, je možno hned přiřadit hodnotu určitému prvku pole nebo přidat nový prvek (bez určení indexu):
$pole[1] = 'Cosi'; $pole['dva'] = 'Neco jineho'; $pole[] = 'Treti prvek';
Opět přidávám odkaz na další podrobnosti z manuálu.
Třídy a objekty
Troufám si říct, že kdo jednou okusí výhody objektového programování, velmi nerad se vrací ke klasickému strukturovanému programování. Naštěstí v případě PHP ani o toto nejste ochuzeni. I když implementace OOP zde není tak propracovaná jako třeba v C++ nebo Javě, to hlavní PHP umí – vytvářet a používat objekty definované vlastní třídou a jednoduchou dědičnost. Vše by mělo být jasné z následujícího kousku kódu (alespoň těm, kteří se už s objekty setkali):
Class Menu { var $names; var $links; function Menu () { ... } function AddItem ($name, $link) { $this->names[] = $name; $this->links[] = $link; ... } function HTMLOutput() { ... } } Class Menu2 extends Menu { function Menu2 () { ... } function HTMLOutput() { ... } } $mymenu = new Menu(); $mymenu->AddItem('Prvni','http://nekam.cz/'); ... $mymenu->HTMLOutput();
Jak je vidět z příkladu, proměnná $this uvnitř definic metod slouží k přístupu ke vlastním proměnným objektu. Konstruktor se definuje jako metoda se stejným názvem, jako má třída (slouží k inicializaci objektu ihned po vytvoření). Třída Menu2 vytváří nabídku trochu jinak než Menu, proto dědí všechny vlastnosti třídy Menu a přepisuje Konstruktor a metodu HTMLOutput. Použití objektů v PHP začíná být velmi zajímavé, jakmile zjistíte, že na mnoha stránkách píšete pořád dokola velmi podobný kód :) Myslím, že o využití OOP při vytváření dynamických webů by se dala (a měla) napsat samostatná část. Na závěr opět odkaz na další dokumentaci.
Sdílení kódu mezi stránkami
… tak trochu souvisí s předchozím odstavcem – definice tříd nebo funkcí, které použijete na několika různých stránkách, můžete uložit zvlášť do souborů (třeba do nějakého podadresáře jako include/) a pomocí volání Include(‚include/soubor.i‘) nebo Require(‚include/soubor.i‘) jej vložit všude tam, kde je třeba. Obsahem vkládaného souboru může být třeba i kus často používaného html kódu. Require() zajistí, že je obsah souboru vložen právě jednou, kdežto pomocí Include() můžete v cyklu vložit obsah souboru opakovaně. Pozor na vkládané soubory s kódem php, ty musí být vždy „obklíčeny“ tagem <script>, jinak nejsou považovány za php kód, ale „holé“ html. Kromě explicitního vkládání souborů umožňuje PHP automaticky vkládat do všech php stránek na začátek a konec obsah nějakých souborů, určených v konfiguraci.
Příště se podíváme na bohatou knihovnu předdefinovaných PHP funkcí …