(hlavička webu)

Základy syntaxe

V předchozích kapitolách jsme si vysvětlili základní principy, připravili webový server a editor, je tedy nejvyšší čas se pustit do programování. V této kapitole si ukážeme základy syntaxe a napíšeme první skript.

PHP kód se píše přímo do stránky, podobně jako HTML. Může se dokonce s HTML kombinovat. Aby tedy bylo poznat odkud kam PHP sahá, musí se označit začátek a konec skriptu. Obvyklý způsob, který se bude běžně používat v této učebnici, je začít skript značkou <?php a ukončit ?>.

Ukončovací značku není třeba psát u PHP kódu, který sahá až do konce souboru. Za konec PHP kódu se v takovém případě jednoduše považuje konec souboru. To může být někdy užitečné, později v této učebnici si takové situace ukážeme.

Kromě uvedeného zápisu se můžete se setkat i se zkráceným, kdy skript začíná jen <? a končí ?>. Jeho fungování ale závisí na nastavení PHP (konkrétně na nastavení SHORT_OPEN_TAGS) a používáte-li na webu XML, může to způsobit problémy v kombinaci s jeho procesními instrukcemi, které se zapisují úplně stejně. Existuje ještě pár dalších způsobů označení PHP skriptu, ale ty se prakticky nepoužívají.

Pojďme tedy na první skript. Začneme tradičním prvním příkladem v programování, zvaným anglicky Hello world, česky Ahoj světe, který vypíše jednoduchý text do stránky. V editoru si založte projekt, vytvořte nový PHP soubor a vložte do něj následující kód:

<?php
//vypíše pozdrav
echo "Ahoj světe!";
?>
Uložte třeba jako prvni.php do adresáře, kde máte kořen webu [odkaz:jak najít kořen webu]. Zadejte adresu souboru v prohlížeči (tedy http://localhost/prvni.php; zadávejte "webovou" adresu, ne cestu na disku, jako C:\www\prvni.php). Na stránce i v jejím zdrojovém kódu byste měli vidět jen text "Ahoj světe!" Pokud tam je i PHP kód, buď nezobrazujete soubor přes webserver (viz výše), nebo nemáte správně nastavený server (viz předchozí kapitoly). Pokud se místo stránky zobrazí chyba 404, stránka nenalezena (page not found), máte buď špatně adresu stránky, nebo jste soubor nahráli na špatné místo (jinam než do kořene webu) zkontrolujte umístění a název souboru ve srovnání se zadanou adresou. Když tedy vše uděláte správně, PHP kód není v prohlížeči viditelný, zpracoval se na serveru a vidět je pouze jeho výstup. I na tomto jednoduchém skriptu můžeme vidět několik věcí:

1. Ohraničení PHP skriptu. Jak už jsme si řekli, skript je ohraničený počáteční a koncovou značkou PHP. Části souboru, které nejsou označené jako PHP skript, se berou prostě jako text a vypíší se do stránky tak jak jsou (později si ukážeme, jak může PHP skript zařídit, že se část mimo skript nevypíše). Takže toto bude fungovat:

<!-- Normální HTML kód -->
<p class="pozdrav">
<?php
echo "Ahoj!"; // Toto PHP zpracuje
?>
<!-- A zase HTML kód -->
</p>
Ale pozor, uvnitř PHP skriptu HTML samostatně být nemůže!
<?php
// Toto nebude fungovat, uvnitř PHP značek musí být platný PHP kód
<p class="pozdrav">
echo "Ahoj!";
</p>
2. Příkazy Oddělují se středníkem a pro lepší přehlednost píšeme každý příkaz na samostatný řádek, i když to PHP přímo nevyžaduje. Naopak oddělování příkazů středníkem vyžadované je a zapomenutý středník je častá příčina chybových hlášek. Máte-li PHP IDE upozorňující na chyby v syntaxi, upozorní i na chybějící středník.

3. Příkaz echo Příkaz echo vypíše text do stránky.

4. Komentáře Text za dvěma lomítky až do konce řádku je komentář a při zpracování skriptu se ignoruje. Místo dvou lomítek lze použít i mřížku (#). Existují také víceřádkové komentáře, začínají /* (lomítko a hvězdička) a končí */ (hvězdička a lomítko). Všimněte si, že zvýrazňovač syntaxe komentáře barevně odliší. Komentáře můžete použít i pro tzv. zakomentování částí skriptu při ladění a testování (například když chcete spustit skript jehož část není hotová nebo hledáte chybu).

<?php
// komentář
# také komentář
/* tento komentář
lze zapsat přes více řádků */
// Následující příkaz je zakomentovaný, nebude proveden:
# echo "Ahoj!";
?>
U komentářů jsou dvě záludnosti. První je asi zřejmá, v komentáři zapsaném /* ... */ nemůže být text "*/", protože by ukončil komentář. Na toto je dobré dát pozor když chcete zakomentovat delší kód, který už komentář obsahuje. Zvýrazňovač syntaxe pomůže takové situace najít, případně editory PHP obsahují funkci, která automaticky zakomentuje označený kód. Druhá záludnost je, že ukončovací značku PHP skriptu zakomentuje pouze víceřádkový komentář (/* ... */) a ne jednořádkový.

5. Řetězce Text, neboli řetězec, se uzavírá do uvozovek. Možná si kladete otázku, jak se tedy vypíší uvozovky. Od toho je takzvané escapování: Pokud se před znakem, který by jinak měl nějaký speciální význam pro PHP, nachází zpětné lomítko (\), zruší se tento speciální význam. Tedy \" neukončí řetězec, ale jen vypíše uvozovku. Analogicky pro vypsání zpětného lomítka musíte v kódu mít dvě zpětná lomítka (první ruší speciální význam druhého). Kromě uvozovek se řetězec může uzavřít i do apostofů: 'řetězec'. Pak můžete uvnitř řetězce používat uvozovky (protože zde nemají speciální význam), zpětným lomítkem se musí escapovat pouze apostrof a zpětné lomítko. Řetězec v uvozovkách má speciálních znaků více, kromě uvozovek a zpětného lomítka je to také znak dolaru ($), o jehož funkci si ještě povíme později v této učebnici. Dále lze v řetězci v uvozovkách používat speciální kombinace pro vypsání znaků jako tabulátor, odřádkování a podobně. Jejich přehled najdete [odkaz]v manuálu[/odkaz].

Všimněte si také, že zvýrazňovač PHP syntaxe řetězce barevně odliší. Dejte ale pozor, abyste řetězce dali skutečně do apostrofů nebo horních rovných uvozovek, nepoužívejte typografické uvozovky („“) jako dělá např. Word, diakritickou čárku (´) a podobně. Na typické české klávesnici jsou uvozovky na stejné klávese jako ů a apostrof na stejné klávese jako přehláska, tzn. uvozovky se napíší shift + ů, apostrof shift + ¨. Na typické anglické klávesnici je obojí na jedné klávese (je tam klávesa apostrof a uvozovky jsou shift + ').

Jak jsme si řekli, HTML kód samostatně v PHP skriptu být nemůže. Ale můžeme ho vypsat příkazem echo: <?php echo "<p class=\"pozdrav\">Ahoj světe!</p>"; echo '<p class="pozdrav">Ahoj světe!</p>'; // tento příkaz dá stejný výsledek jako předchozí ?> (všimněte si také použití uvozovek, apostrofů a zpětných lomítek)

Kromě textových řetězců můžeme v příkazu echo použít i tzv. výrazy, tedy určité výpočty.

<?php
echo 27 + 15; // vypíše 42
?>
Všimněte si, výraz není v uvozovkách (ani apostrofech). Ty jsou jen pro řetězce. Jednoduché pravidlo je, že když do kódu píšete přímo text který se má vypsat, je to řetězec a patří do uvozovek. Když píšete PHP konstrukci, jejímž výsledkem je text který se má vypsat, není to řetězec a nepatří do uvozovek. Srovnejte:
<?php
echo "12 - 2"; // řetězec, vypíše se 12 - 2
echo 12 - 2; // výraz, vypíše se 10
?>
Více o výrazech, operátorech a dalších souvisejících věcech si povíme v následujících kapitolách.

Už tedy umíme první příkaz, echo. Zatím ale nám ale PHP v praxi moc nepřineslo oproti přímému zápisu do HTML. Pojďme tedy na praktičtější příklady a zároveň se naučíme i druhý PHP příkaz: include. Příkaz include vloží do stránky obsah zadaného souboru. Je to tedy způsob, jak mít například společnou hlavičku webu v jednom souboru a vkládat ji do všech stránek. Jak include funguje? Z předchozího příkladu již máme vytvořený soubor prvni.php s obsahem:

<?php
//vypíše pozdrav
echo "Ahoj světe!";
?>
Založte nový soubor jménem třeba druhy.php a do něj vložte kód:
<?php
// vloží soubor prvni.php
include "prvni.php";
?>
Zobrazte si druhy.php v prohlížeči. Měli byste na stránce vidět pozdrav "Ahoj světe!". Příkaz include "prvni.php"; se nahradil obsahem souboru prvni.php. A protože v prvni.php je PHP skript, PHP ho zpracovalo a vložil se výstup skriptu. Poznámka: Vložený soubor se zpracovává odděleně od prostředí souboru odkud byl vložen, takže například ve vloženém skriptu musí znovu být počáteční značka PHP, jinak se skript nezpracuje.

Existuje také příkaz require, který funguje úplně stejně jako include. Jediný rozdíl je v případě, kdy ten vkládaný soubor neexistuje. V takovém případě include generuje varování (warning) a pokračuje ve skriptu, zatímco require generuje fatální chybu (fatal error) a ukončí zpracování skriptu. Na chybové hlášky se ještě podíváme blíže v příští kapitole. Příkaz require je tedy vhodný pro situace, kdy bez vloženého souboru nelze ve skriptu rozumně pokračovat.

<?php
// Pokud soubor existuje, funguje toto úplně stejně jako předchozí příklad
require "prvni.php";
?>

Společná HTML hlavička

Každá HTML stránka by měla mít hlavičku obsahující minimálně titulek a obvykle i definici kódování. A na úplném začátku HTML dokumentu je vhodné mít značku doctype. Na jednom webu si obvykle vystačíme s jedním doctype a jedním kódováním a v našich příkladech prozatím i s jednotným titulkem (později si ukážeme, jak by šlo titulek nastavit pro každou stránku). Abychom tedy nemuseli tuto část uvádět u každého příkladu, připravíme si nyní společnou hlavičku. Zároveň si do společné hlavičky přidáme ještě jedno nastavení, které využijeme později. Pomocí funkce mb_internal_encoding nastavíme interní kódování na UTF-8. Pokud chceme v PHP pracovat i s jinými znaky než anglickou abecedou (což v češtině budeme chtít), je bezpečnější interní kódování nastavit na stejné, jako je kódování souborů se skriptem, tzn. obvykle UTF-8. Vytvořte tedy soubor spolecna_hlavicka.php s obsahem:
<?php mb_internal_encoding("UTF-8"); ?>
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>Příklad z učebnice PHP</title>
</head>
Nyní nebudeme muset do každého příkladu znovu kopírovat hlavičku stránky, bude stačit napsat:
include "spolecna_hlavicka.php";

Volání funkcí

Naučili jsme se už několik příkazů a ukázali si jak vypadají výrazy, podívejme se tedy ještě na jednu část PHP, a sice funkce. Funkce je oddělený kus kódu, který má své jméno a přes to jméno ho lze zavolat, čili spustit. Jedním příkazem (voláním funkce) lze tedy spustit nějaký složitější výpočet, a to z různých míst, aniž bychom museli pokaždé psát všechny příkazy toho výpočtu. Později se naučíme vytvářet si funkce vlastní, ale zatím si ukážeme jak volat ty, které má PHP už zabudované. Funkce se zavolá uvedením jejího názvu, následovaného kulatými závorkami a samozřejmě středníkem pro zakončení příkazu. Jednoduchý a přitom pro nás užitečný příklad je funkce phpinfo. Ta vypíše do stránky informace o serveru, verzi a nastavení PHP, ze kterého byla spuštěna. Vyzkoušejte následující skript:
<?php
phpinfo();
?>
Uložte do kořene webu jako phpinfo.php. Pokud máte PHP nainstalované z nějakého balíčku, může se stát, že tam už soubor phpinfo.php budete mít. V takovém případě zkontrolujte obsah toho existujícího skriptu, nejspíš bude stejný, případně s nějakým komentářem. Nejste-li si jistí, můžete použít jiné jméno. Při zadání adresy stránky v prohlížeči byste pak měli vidět výpis nastavení PHP. [obrázek:screenshot phpinfo] Tento výpis je velmi užitečný. Budete-li potřebovat vědět jakou máte verzi PHP, zda máte či nemáte v PHP nainstalovanou nějakou komponentu, jaké máte hodnoty různých nastavení a podobně, zjistíte to právě v tomto výpisu. Poznámka: Tento výpis je pouze informativní pro čtení, nelze přes něj hodnoty nastavení měnit.

Některé funkce také přijímají hodnoty, takzvané argumenty (nebo parametry, anglicky parameters). Argumenty se píší dovnitř závorek, které jsou za názvem funkce. Pokud je argumentů více než jeden, oddělují se čárkami. Funkce také může mít pro argument nastavenou výchozí hodnotu. Pak při volání funkce nemusí být uveden a použije se místo něj výchozí hodnota. Přikladem může být funkce trim(). Tato funkce slouží k odstranění nežádoucích znaků na začátku a konci řetězce. Má dva argumenty: První je řetězec se kterým se má pracovat, druhý je řetězec obsahující výčet znaků, které se mají odstranit. Druhý argument má výchozí hodnotu, a sice: Mezera, tabulátor, odřádkování a málokdy používané znaky NUL a vertikální tabulátor. Volání funkce trim() pak může vypadat takto:

<?php
trim("..:::Toto je řetězec:::...", ".:"); // Odstraní tečky a dvojtečky na začátku a konci uvedeného řetězce
trim("  Ahoj        "); // Druhý argument nemusí být uveden, pak se použije výchozí hodnota, viz výše  
?>

Shrnutí

V této kapitole jsme si ukázali, jak se do stránky vloží PHP kód, jak se zapisují příkazy, komentáře, výrazy, jak se volají funkce a jak se funkcím předávají hodnoty (argumenty). Popisy funkcí, počet a význam argumentů najdete v [odkaz]manuálu[/odkaz]. V současné době sice není PHP manuál k dispozici v češtině, ale u funkcí bývají příklady použití, které bývají obecně srozumitelné i když přesně nerozumíte zbytku textu. Pro orientaci v popisu funkce můžete také použít online překladač. Zároveň byla možnost vidět i některé záludnosti, které při vkládání PHP do stránky mohou nastat. Ukázali jsme si příkazy echo, include a require a funkci phpinfo(). Příští kapitoly budou na těchto základních informacích stavět, prohloubí je a rozšíří.

Vyzkoušejte si

Poznámka: Zobrazí-li se při zkoušení následujících příkladů chybové hlášky (nebo se nezobrazí nic) a nevíte co s nimi, přečtěte si nejdříve další kapitolu o chybách a pak se k danému příkladu vraťte a zkuste chybu odstranit.

1. Zkuste si v editoru napsat libovolný kód obsahující příkazy echo, řetězce, komentáře a výrazy. Nemusíte ho ukládat, jen sledujte, jak editor zvýrazňuje různé PHP konstrukce.

2. Vytvořte soubor k4_cv1.php. V něm vytvořte v HTML základní kostru stránky s odstavcem v těle stránky. Do odstavce vložte text pomocí PHP. Zkontrolujte kód stránky v prohlížeči.

3. Vytvořte soubor k4_cv2.php, vymyslete pro něj podobný HTML kód jako v předchozím příkladu, ale celý ho vypište pomocí PHP. Zkontrolujte kód stránky v prohlížeči.

4. Vytvořte soubor k4_paticka.php a v něm pomocí HTML vytvořte prvek <div> s textem pro zápatí webu. Použijte PHP pro vložení této patičky do stránek k4_cv1.php a k4_cv2.php.

5. S pomocí výpisu phpinfo() zjistěte hodnotu nastavení ERROR_REPORTING svého serveru.

(patička webu)