Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí Úvodem Tento text vznikl v relativně krátkém časovém období, a proto nemusí být zcela korektní. Jakékoli objevené chyby sdělte prosím šetrnou formou autorovi. V následující referenci nebudou kladeny žádné nároky na úplnost, neboť zde pro ni není prostor. Dále se předpokládá, že čtenář je zběžně obeznámen s jazykem HTML, principem fungování HTTP protokolu, klient-server architekturou aplikací a fungováním CGI skriptů.
Obsah 1.
Základní principy fungování PHP skriptů .............................................................................................................. 2 1.1 Kombinování PHP a HTML kódu .................................................................................................................................... 2 1.2 Dělení kódu do souborů .................................................................................................................................................... 2 1.3 Zpracování dat z HTTP protokolu ................................................................................................................................... 3 1.4 Komentáře ........................................................................................................................................................................... 3
2.
Proměnné, základní datové typy a operace s nimi ................................................................................................. 4 2.1 Syntaxe a definování proměnných ................................................................................................................................... 4 2.2 Datové typy ......................................................................................................................................................................... 4 2.3 Přetypování ......................................................................................................................................................................... 4 2.4 Operátory ............................................................................................................................................................................ 5 2.5 Řetězce a magické uvozovky ............................................................................................................................................ 6
3.
Řídící struktury ............................................................................................................................................................ 7 3.1 Struktury pro větvení běhu kódu ..................................................................................................................................... 7 3.2 Cykly .................................................................................................................................................................................... 7
4.
Funkce ........................................................................................................................................................................... 8 4.1 Základní syntax .................................................................................................................................................................. 8 4.2 Lokální a globální proměnné ............................................................................................................................................ 9 4.3 Předávání parametrů referencí ......................................................................................................................................... 9
5.
Pole ................................................................................................................................................................................ 9 5.1 Základní syntax .................................................................................................................................................................. 9 5.2 Základní funkce pro práci s poli ....................................................................................................................................... 10
6.
Objekty .......................................................................................................................................................................... 11
7.
Reference ........................................................................................................................................................................ 11 7.1 Základní informace a vytváření referencí ....................................................................................................................... 11 7.2 Rušení referencí .................................................................................................................................................................. 11 7.3 Používání referencí ............................................................................................................................................................ 12 7.4 Rozdíl mezi referencemi a ukazateli ................................................................................................................................ 12
8.
Přehled vybraných vestavěných funkcí ................................................................................................................... 12 8.1 Funkce pro práci s řetězci .................................................................................................................................................. 12 8.2 Regulární výrazy ................................................................................................................................................................ 13 8.3 Funkce pro práci se soubory ............................................................................................................................................. 14 8.4 Funkce pro práci s databázi MySQL ................................................................................................................................ 14 8.5 Co PHP ještě umí ................................................................................................................................................................ 15
9.
Závěr aneb co se jinam nevešlo ................................................................................................................................. 15
© Martin Kruliš – pouze ke studijním účelům
strana 1 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí 1. Základní principy fungování PHP skriptů 1.1 Kombinování PHP a HTML kódu Skripty PHP (PHP: Hypertext Preprocesor), jak již název napovídá, jsou určeny ke vkládání do HTML kódu. Při průchodu skriptu PHP interpretem jsou pak tyto fragmenty PHP příkazů vyjmuty z HTML, zpracovány a jejich výsledky jsou vloženy zpět do HTML. Na následujícím příkladu je vidět fragment kódu PHP vnořený do HTML stránky. Příklad 1:
Při zpracování stránky PHP interpretem se z HTML stránky vyjme vše mezi značkami . Obsah (PHP kód) se zpracuje, a výstup tohoto kódu je vložen zpět namísto výše uvedených značek. Výstup se z PHP provádí pomocí příkazů echo nebo funkce print. V příkladu 1 je tedy do textu vložen řetězec „Výstup generovaný z PHP.“ a data, která získá klient, budou vypadat následovně. Příklad 1 - výsledek:
Výstup generovaný z PHP.
V praxi se často používá lehce odlišný přístup, který se snaží co nejvíce separovat HTML a PHP. Většina PHP skriptů pak neobsahuje žádný HTML kód a celý soubor je uzavřen do značek . Kód HTML je poté načítán a vkládán ze samostatných souborů – šablon, které naopak obsahují převážně HTML kód.
1.2 Dělení kódu do souborů Téměř každý projekt vyžaduje rozdělení kódu do více souborů, aby byl kód čitelnější a přehlednější. Tento koncept navíc umožňuje vytváření knihoven, které jsou základem pro vícenásobné použití kódu. PHP jde při práci se soubory skriptů ještě dál a nabízí celkem čtyři základní funkce, které umožňují vkládání skriptů: include() – Vloží do skriptu jiný soubor se skriptem těsně za příkaz include. Vložený soubor je navíc rovnou vyhodnocen (tzn. interpret pokračuje v běhu ve vloženém kódu). require() – Tento příkaz funguje stejně, jako include, ale vkládaný soubor není vložen za, nýbrž místo příkazu require. Na první pohled se může zdát, že v tom není rozdíl, ale zkusme si představit, jak se budou tyto příkazy chovat, použijeme-li je v cyklu. include_once(), require_once() – Fungují stejně jako include a require, ale zároveň kontrolují, aby jeden skript nebyl vložen vícekrát. Pro následující příklad předpokládejme, že máme skript functions.php, který obsahuje užitečné funkce a dále pak soubory header.html a footer.html, které obsahují HTML kód se začátkem (resp. koncem) stránky. Náš skript pak může vypadat třeba takto:
© Martin Kruliš – pouze ke studijním účelům
strana 2 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí Příklad 2: Jak je vidět, výše zmíněné funkce lze použít i pro vkládání HTML kódu. Vložený soubor je zpracován stejně jako samostatný soubor. Pokud tedy obsahuje pouze PHP, musí být celý uzavřen do značek . Pokud naopak obsahuje pouze HTML, je hned po vložení odeslán na výstup (do klientova prohlížeče).
1.3 Zpracování dat z HTTP protokolu Skriptovací jazyk PHP je navržen tak, aby co nejvíce usnadnil vývoj webových aplikací. Z tohoto důvodu obsahuje nativně několik vlastností a funkcí, které ostatní jazyky nemají, nebo je mají implementovány v přídavných knihovnách. Nejdůležitější je pro webového programátora možnost manipulovat s hlavičkami HTTP protokolu, a to jednak získat hlavičky příchozího požadavku a jednak mít možnost upravovat hlavičky HTTP odpovědi na tento požadavek. Příchozí data z požadavku jsou automaticky připravena interpretem PHP do několika super-globálních proměnných, z nichž nejdůležitější jsou $_GET a $_POST. Slovo „super-globální“ zde znamená, že tyto identifikátory jsou dostupně z jakéhokoli místa kódu. Obě proměnné jsou pole uchovávající parametry předané metodou GET (resp. metodou POST). Indexem v poli je název parametru a hodnotou pak pochopitelně jeho vlastní hodnota. Více o polích a práci s nimi se dozvíte v kapitole „Pole“. Existují i jiné způsoby, jak přistupovat k těmto parametrům, ale výše uvedený je jediný, který je považován za správný. Ostatní způsoby jsou zastaralé a často bývají dokonce zakázány v konfiguraci PHP interpretu. Příklad 3: Formulář, který je odesílán z klienta:
Skript action.php, který je zavolán, aby obsloužil POST požadavek a data z odeslaného formuláře:
1.4 Komentáře Komentáře v PHP mají stejnou podobu jako např. v C++. Rozeznáváme dva typy komentářů – blokové a řádkové. Blokový komentář je ohraničen symboly /* a */. Řádkový komentář je uvozen dvěma lomítky // a pokračuje až do konce řádku. Příklad 4:
© Martin Kruliš – pouze ke studijním účelům
strana 3 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí 2. Proměnné, základní datové typy a operace s nimi 2.1 Syntaxe a definování proměnných Identifikátory proměnných v PHP začínají vždy znakem '$'. Následuje identifikátor proměnné, který může obsahovat pouze písmena, čísla a znak '_'. Proměnné se nemusí deklarovat, definují se prvním přiřazením do proměnné. Proměnné, které dosud nebyly deklarovány, nesmí být použity uvnitř výrazu. Navíc jsou definovány dvě důležité funkce pro práci s proměnnými: isset($var) – Zjišťuje, zda je proměnná $var již nastavena. unset($var) – Odstraní proměnnou $var (po zavolání této funkce přestane proměnná existovat). Příklad 5: if (!isset($a)) $a = 0; $b = $a + 1; unset($a); echo $a;
// // // //
pokud není $a nastaveno, přiřadí do něj 0 teď už můžeme $a použít ve výrazu odstraníme $a způsobí chybu - $a už není definováno
2.2 Datové typy Jazyk PHP obsahuje čtyři skalární typy. Protože jsou nejjednodušší, začneme právě jimi: boolean – Proměnná tohoto typu může nabývat pouze dvou hodnot – true a false. integer – Celé číslo. Jeho rozsah je platformě závislý, ale zpravidla to bývá 32-bitová hodnota. float (nebo též double) – Reálné číslo s plovoucí desetinnou čárkou. string – Řetězec znaků libovolné délky (resp. téměř libovolné, neboť paměť skriptu bývá omezena). Kromě skalárních typů existují ještě dva složené typy – pole (array) a objekt (object). Tyto typy stojí za podrobnější popis, a tak jim byly vyhrazeny samostatné kapitoly. Aby byl výčet úplný, musíme ještě zmínit dva speciální typy: resource – Tento typ je vracen některými speciálními funkcemi, které manipulují s externími zdroji. Jako příklad bychom mohli uvést handle na otevřený soubor nebo na otevřené spojení s databází. Tento datový typ je možné upravovat pouze speciálními funkcemi a přiřazovat jej operátorem '='. null – Speciální datový typ, který může obsahovat pouze jedinou hodnotu – null. Tato hodnota říká „proměnná nemá žádnou hodnotu“. Čistě technicky je proměnná považována za null, pokud do ní byla explicitně dosazena hodnota null, pokud ještě nebyla inicializována nebo pokud na ni byla zavolána funkce unset(). Na testování typu proměnných existuje celá paleta funkcí začínajících prefixem is_. Například is_bool() otestuje, zda je proměnná typu boolean, is_string(), zda je to řetězec a podobně. Zde uvedeme pouze jejich výčet bez hlubšího vysvětlení, neboť názvy jsou víc než intuitivní: is_array(), is_bool(), is_float(), is_int(), is_null(), is_numeric(), is_object(), is_resource(), is_scalar(), is_string()
2.3 Přetypování Proměnné (resp. výrazy) mohou být při vyhodnocování automaticky přetypovány. Pravidla pro přetypování jsou celkem složitá, a proto zde zmíníme jen několik nejdůležitějších. Vše lze přetypovat na boolean (což se velice hodí např. při vyhodnocování podmínek). Hodnoty null, 0, prázdný řetězec a prázdné pole se převedou na false. Vše ostatní je bráno jako hodnota true. Pozor na začátečnickou chybu – 0 odpovídá false, ale '0' odpovídá true, neboť se jedná o neprázdný řetězec s jediným znakem nula. Automaticky se převádí čísla na řetězec i zpět. Pokud je např. použit řetězec uvnitř matematického výrazu, pokusí se PHP převést co nejdelší možnou počáteční část řetězce na číslo (v závislosti na formátu zápisu buď na celé, nebo na desetinné číslo). V případě, že tento převod není možný, je řetězec převeden na celé číslo 0. © Martin Kruliš – pouze ke studijním účelům
strana 4 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí Obdobně jako v např. jazyce C, i v PHP funguje explicitní přetypování. Stačí pouze napsat datový typ do závorky před přetypovávaný výraz. Příklad 6: $str = '10 malých černoušků'; $pocet = $str + 1; // $str se přetypuje na číslo, takže $pocet == 11 echo $pocet; // $pocet se přetypuje na řetězec a vypíše se $str = 'asi 11'; // tentokrát si připravíme špatný řetězec $pocet = $str + 2; // $str neobsahuje na začátku číslo => má hodnotu 0 $str = (string)$pocet; // do $str se uloží počet jako řetězec, tedy '2'
2.4 Operátory Zde je přehled téměř všech operátorů, které se v PHP vyskytují. Jako první si představíme aritmetické operátory: +, -, *, /, % Tyto operátory mají stejný význam jako např. v jazyce C. Jen pro připomenutí - % je operátor zbytku po celočíselném dělení. Dalším neméně důležitým operátorem je operátor přiřazení =. Narozdíl od např. Pascalu je v C-čkových jazycích běžné, že přiřazení je výraz (nikoli příkaz), který vrací to, co přiřadil. Díky tomu lze psát zkráceně přiřazování stejné hodnoty do více proměnných. $a = $b = $c = 1; Celý výraz se vyhodnocuje postupně odprava. Tedy 1 se přiřadí do $c a pošle se dále doleva. Všechny tři proměnné tak získají postupně hodnotu 1. Pro většinu ostatních operátorů existuje ještě jejich varianta s přiřazením. Tedy např. k operátoru + existuje ještě přiřazující operátor +=. Výraz $a += 5; je jen syntaktickou zkratkou za $a = $a + 5;. S celými čísly toho umíme ještě víc – lze s nimi pracovat, jako by to byla pole bitů pevné délky. Na to jsou tu bitové operátory: $a & $b – AND (logický součin). Nastavuje bity tam, kde jsou nastaveny v $a i $b. $a | $b - OR (logický součet). Nastavuje bity tam, kde jsou nastaveny v $a nebo v $b. $a ^ $b – XOR (logický exkluzivní součet). Nastavuje bity tam, kde jsou nastaveny v $a nebo v $b, ale ne v obou současně. ~ $a – NOT (bitová negace). Změní nuly na jedničky a naopak. $a << $b – Bitový posun doleva. Posune bity v $a o $b bitů výše. $a >> $b – Bitový posun doprava. Posune bity v $a o $b bitů níže. Pro vyhodnocování podmínek jsou nezbytné také operátory porovnání. Jejich operandy mohou být téměř libovolné výrazy a jejich výsledkem je boolovská hodnota. ==, != – rovnost a nerovnost ===, !== – identita a neidentita (identita je rovnost hodnot i typů) <, >, <=, >= – menší, větší, menší nebo rovno, větší nebo rovno (fungují pouze pro číselné výrazy) Pro boolovské hodnoty jsou zde logické operátory (narozdíl od bitových operátorů fungují pouze na výrazy typu boolean): && – logické „a“ (AND) || – logické „nebo“ (OR) ! – unární operátor negace (NOT)
© Martin Kruliš – pouze ke studijním účelům
strana 5 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí Jelikož PHP vychází z jazyka C, obsahuje i typické inkrementační a dekrementační operátory. $a++, $a-- – post-inkrement (resp. dekrement) nejprve je vrácena hodnota $a a následně je proměnná upravena ++$a, --$a – pre-inkrement (resp. dekrement) nejprve upravena hodnota $a a až následně je vrácena Příklad 7: $a = 1; $b = $a++; $a = ++$b;
// $a = 2, $b = 1 // $a = 2, $b = 2
Jako poslední zbývá uvést operátor pro spojení dvou řetězců. Jelikož je + již obsazené pro aritmetické účely, stala se operátorem sřetězení tečka. Stejně tak, jako + může způsobit automatickou konverzi řetězce na číslo, tak i '.' může způsobit konverzi čísla na řetězec. Příklad 8: $num = 42; $str = 'Hodnota proměnné num je ' . $num; // přetypuje $num na string echo $str; // Vypíše: Hodnota proměnné num je 42
2.5 Řetězce a uvozovky O tom, že existuje datový typ řetězec, již víme. Dosud jsme ale neřekli, jak se řetězce zapisují do zdrojového kódu. Existují dva způsoby jak řetězce zapisovat – pomocí apostrofů a pomocí uvozovek. Základním způsobem zápisu, je umístit řetězec do apostrofů - 'řetězec'. Všechny znaky uvnitř (kromě apostrofu) jsou chápány jako znaky řetězce (žádný znak nemá speciální význam). Pokud chcete do řetězce vložit apostrof, je potřeba před něho vložit zpětné lomítko: 'Tady bude jeden apostrof \' a tady pokračuje řetězec.' Stejným způsobem je potřeba vložit lomítko před znak nového řádku. 'Tady je první řádek \ ... a tady pokračuje druhý řádek' Vyskytne-li se znak zpětného lomítka před jiným znakem, než apostrof nebo konec řádku, je chápán jako normální znak. Je-li potřeba zobrazit znak \ před apostrofem, je potřeba jej zdvojit: 'Zde bude lomítko \ a zde bude lomítko a apostrof \\\'.' Pokud nepotřebujeme do řetězce vkládat speciální znaky, nebo jiné věci, je tento způsob zápisu řetězců nejlepší a nejrychlejší z hlediska zpracování interpretem. V některých případech může být naopak vhodné vkládat do řetězců přímo speciální znaky, nebo dokonce hodnoty proměnných. Za tímto účelem je zde alternativní zápis – řetěze ohraničené uvozovkami. Navíc lze do něho vkládat speciální symboly pomocí notace se zpětným lomítkem: \n – Znak LF (linefeed), neboli přechod na nový řádek (na unixu se používá LF k zalamování řádků). \r – Znak CR (carriage return), neboli návrat vozíku (ve Windows se používá kombinace CR LF k zalomení řádku). \t – Horizontální tabulátor. Některé symboly, které mají speciální význam, musí být uvozeny zpětným lomítkem, aby byly chápány pouze jako znaky: \\ (zpětné lomítko), \$ (znak dolaru), a pochopitelně uvozovky \". Navíc lze vkládat do řetězce znaky podle jejich ASCII hodnoty a to buď v osmičkovém, nebo v hexadecimálním zápisu. Např. mezeru (znak s číslem 32) lze zapsat osmičkově jako \40, nebo hexadecimálně \x20. Od PHP 5.1.1 platí, že pokud použijete zpětné lomítko před jakýmkoli jiným znakem, bude chápáno jako obyčejné zpětné lomítko a vloží se do řetězce jako normální znak. Kromě speciálních symbolů lze do řetězců vkládat i hodnoty proměnných. Stačí uvést název proměnné v řetězci a interpret za něho automaticky dosadí hodnotu dané proměnné přetypovanou na řetězec.
© Martin Kruliš – pouze ke studijním účelům
strana 6 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí V případě, že by název proměnné kolidoval s jinými znaky v řetězci, je třeba ohraničit identifikátor proměnné složenými závorkami. Příklad 9: $num $str $kus $str $str
= = = = =
42; "Hodnota \$num je $num." // ve $str je 'Hodnota $num je 42.' 'kus'; "dva $kusy"; // nebude fungovat - proměnná $kusy neexistuje "dva {$kus}y" // musíme ohraničit identifikátor závorkami
3. Řídicí struktury V následujících příkladech budeme podmínkou rozumět výraz typu boolean (nebo takový, který lze na boolean automaticky přetypovat). Za příkaz budeme považovat volání funkce, řídící strukturu, blok příkazů uzavřený do složených závorek, nebo výraz ukončený středníkem. Syntaxe řídících struktur je téměř totožná se syntaxí v jazyce C. U většiny struktur tak bude vynechán podrobnější popis, neboť jejich princip fungování je totožný s většinou příbuzných jazyků.
3.1 Struktury pro větvení běhu kódu Nejednodušším příkazem je podmíněný příkaz. Může být zapsán několika způsoby: if (podmínka) příkaz; if (podmínka) příkaz1; else příkaz2; if (podmínka1) příkaz1; elseif (podmínka2) příkaz2; elseif ... else příkazN; Pro usnadnění složitějších větvení je k dispozici příkaz switch, který má následující syntax: switch (výraz) { case hodnota: ...příkazy... case hodnota2: ... default: ...příkazy... } Při provádění této struktury se nejprve vyhodnotí její řídící výraz. Následně se od shora dolů procházejí návěstí case, a pokud se hodnota návěstí shoduje s hodnotou výrazu, skočí řízení programu na další příkaz následující za tímto case. Dále se provádí příkazy (s tím že se ostatní návěstí case ignorují), dokud program nenarazí na ukončující složenou závorku struktury switch, nebo dokud nenarazí na příkaz brake. Příkaz brake ukončí provádění kódu uvnitř struktury switch a pokračuje v kódu těsně za touto strukturou. Kromě návěstí case existuje ještě speciální návěstí default, které musí být vždy poslední, a do něhož je předáno řízení v případě, že žádný z předchozích case neuspěje.
3.2 Cykly Základní strukturou je while-cyklus, neboli cyklus s podmínkou na začátku. while (podmínka) příkaz; Tento cyklus vyhodnocuje podmínku před každým provedením příkazu. Pokud je podmínka nepravdivá, pokračuje se v běhu skriptu těsně za while strukturou. Doplňující strukturou je pak do-while cyklus, neboli cyklus s podmínkou na konci. do příkaz; while (podmínka); Tento cyklus vyhodnocuje podmínku až na konci (tj. po provedení příkazu). Z toho je na první pohled vidět, že příkaz se provede vždy alespoň jednou. Dále existuje struktura for-cyklus, která je vlastně jen zkratkou za while cyklus s inicializací.
© Martin Kruliš – pouze ke studijním účelům
strana 7 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí for (inicializace; podmínka; inkrementace) příkaz; je vlastně jen zkratkou za zápis inicializace; while (podmínka) { příkaz; inkrementace; } Příklad 10 (snadný zápis cyklu pevné délky): for ($i = 0; $i < 10; $i++) echo $i;
// vypíše čísla od 0 do 9.
Kromě těchto cyklů obsahuje PHP také jeden speciální cyklus – iterace přes všechny objekty. Tímto cyklem lze procházet pole nebo libovolné objekty implementující rozhraní Iterator. foreach (pole as hodnota) příkaz; foreach (pole as klíč => hodnota) příkaz; Tento příkaz projde všechny prvky daného pole a postupně je přiřazuje do proměnných hodnota (případně ještě uloží jejich klíč do příslušné proměnné). Tyto proměnné jsou k dispozici pouze v rámci provádění příkazu cyklu. Detailnějšímu popisu procházení polí se budeme věnovat v samostatné kapitole. Příklad 11: $pole = array(2, 42, 54, 1); // pole se 4mi prvky foreach($pole as $num) echo $num; // vypíše postupně 2, 42, 54 a 1 Uvnitř cyklů lze používat dva speciální příkazy break a continue. Příkaz break okamžitě ukončí provádění cyklu a skočí na první příkaz za cyklem. Příkaz continue přeskočí provádění zbytku aktuální iterace a započne iteraci novou.
4. Funkce 4.1 Základní syntax Funkce jsou základním stavebním kamenem každého procedurálního jazyka. Deklarace funkce má v PHP tvar: function identifikátor($arg1, $arg2, ...) { ... tělo funkce ... } Všimněme si, že parametry nemají žádný typ a stejně tak není udáván žádný návratový typ, neboť hodnoty předávané jako argumenty a návratová hodnota mohou být libovolného typu. Uvnitř funkce lze použít příkaz return, který ukončí provádění funkce. Příkaz return může být navíc následován návratovou hodnotou, která je předána ven z volání funkce. Funkce se volá zapsáním identifikátoru do zdrojového kódu následovaného kulatými závorkami se správným počtem argumentů. Kulaté závorky je třeba uvést i v případě, že funkce nemá žádné argumenty. Příklad 12: function pozdrav() { echo 'Vítejte...'; } function umocni($x) { return $x * $x; // umocní $x a předá výsledek jako návratovou hodnotu } pozdrav(); echo umocni(3);
// vypíše 9
© Martin Kruliš – pouze ke studijním účelům
strana 8 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí 4.2 Lokální a globální proměnné Všechny proměnné deklarované ve volném kódu (mimo těla funkcí, metod a tříd) jsou brány jako globální proměnné. Uvnitř funkce jsou naopak všechny proměnné brány jako lokální (bez ohledu na to, zda existují stejnojmenné globální proměnné). Z funkce se dá ke globálním proměnným přistupovat přes super-globální pole $GLOBALS, které je viditelné ze všech částí kódu, nebo pomocí deklarace global, která zpřístupní zvolenou proměnnou (pokud existuje) v rámci kontextu funkce. Pro lepší pochopení je zde následující příklad. Příklad 13: $a = 2; $b = 3; function foo() { global $a; echo $a; echo $GLOBALS['b']; }
// zpřístupní globální proměnnou $a // vypíše 2 // vypíše přímo hodnotu glob. proměnné $b, tedy 3
4.3 Předávání parametrů referencí Doposud jsme předpokládali, že jsou všechny parametry předávány hodnotou. Jazyk PHP podporuje rovněž vytváření referencí. Jedná se o obecný mechanismus popsaný v kapitole „Reference“, nikoli o speciální vlastnost funkcí, avšak s funkcemi bývá nejčastěji použit, takže se o něm zmíníme i zde. Pokud chceme předat parametr odkazem, je třeba před jeho deklaraci uvést znak &. Pro jednoduchost si lze představit, že tento znak funguje stejně jako např. klíčové slovo var v Pascalu. Podrobnější popis referencí naleznete v příslušné kapitole. Příklad 14: function inc(&$x) { $x++; } $a = 2; inc($a);
// $a bude teď mít hodnotu 3
5. Pole 5.1 Základní syntax Pole je v PHP velice silným datovým typem, který supluje i celou řadu jiných datových struktur. Na rozdíl od většiny C-čkových jazyků, pole v PHP jsou výhradně dynamická (tzn. nemají předem danou délku) a prvky lze do nich libovolně přidávat a odebírat. Spíše než klasickému poli se podobají seznamům. Zároveň zastávají i funkci hašovací tabulky, zásobníku, fronty a celé řady dalších struktur. Pole v PHP je vždy jednorozměrné. Jeho prvky mohou být indexovány celým číslem nebo řetězcem (a to dokonce kombinovaně – tj. některé prvky číslem a některé řetězcem). Hodnotou prvku pole může mít jakýkoli datový typ (stejně jako u normálních proměnných), tedy včetně pole – tím lze vytvářet pole vícerozměrná. Každá položka může být navíc jiného datového typu, takže lze pole použít např. jako strukturu uchovávající různá data, jako strom apod. Pole se vytváří speciální funkcí array, která bere jako argumenty výčet prvků. Mezi prvky lze uvádět pouze hodnoty (jim jsou poté automaticky dosazeny číselné klíče), nebo i hodnoty s klíčem.
© Martin Kruliš – pouze ke studijním účelům
strana 9 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí Příklad 15: $pole = array(3, 5, 7); // pole s prvky 3, 5 a 7 indexované čísly od 0 echo $pole[2] ; // vypíše hodnotu prvku s indexem 2, což je 7 // definujeme pole hodnot i s příslušnými klíči $barvy = array('pomeranč' => 'oranžový', 'banán' => 'žlutý', 'jahoda' => 'červená'); echo 'Banán je ' . $barvy['banán']; K prvkům pole se přistupuje uvedením identifikátoru pole a následně klíče v hranatých závorkách. S prvky pole je to stejné jako s proměnnými. Deklarují se prvním přiřazením, funkce isset() otestuje, zda je položka pole nastavena a funkce unset() dokáže odstranit vybraný prvek pole. Příklad 16: $pole = array(); // vytvoří prázdné pole $pole['kniha'] = 'Stopařův průvodce'; // přidá prvek 'kniha' if ( isset($pole['autor']) ) echo $pole['autor'];
// pokud existuje prvek 'autor' // vypíše jej
unset($pole['kniha'])
// odstraní pouze prvek 'kniha'
Navíc lze přidávat prvky „na konec“ a automaticky jim přiřadit o jedna vyšší číselný klíč, než je nejvyšší dosud použitý. Viz následující příklad. Příklad 17: $prvocisla = array(2, 3, 5); $prvocisla[] = 7; // přidá nový prvek 7 na konec pole s indexem 3 $mix = array(2, 4, 42 => 56, 'oook' => 'eeek', 'foo'); $mix[] = 'bar'; // přidá nový prvek 'bar' na konec pole s indexem 44
5.2 Základní funkce pro práci s poli Existuje široká paleta funkcí pro práci s poli. Zde uvedeme pouze několik málo nejdůležitějších. Zbylé můžete nalézt např. v dokumentaci PHP. Vzhledem k tomu, že pole jsou vždy dynamická, je potřeba nějakým způsobem zjistit, kolik prvků pole obsahuje. K tomuto účelu slouží funkce count(). Každé pole má vnitřní ukazatel (pro jednoduchost ho v následujícím textu označíme pouze ukazatel), který v každém okamžiku ukazuje na jeden prvek pole, případně za poslední prvek pole. Funkce current() vrací hodnotu prvku, na který je právě ukazatel nasměrován. Obdobně funkce key() vrací klíč tohoto prvku. S ukazatelem lze pochopitelně manipulovat. Funkce reset() nastaví ukazatel zpět na první položku v poli. Analogicky funkce end() přemístí ukazatel na poslední prvek pole. Dále existují funkce next() a prev(), které posouvají ukazatel na následující (resp. na předchozí) prvek. Pro úplnost zbývá uvést, že pořadí prvků v poli je dáno chronologickým pořadím vkládání prvků do pole, případně pořadím argumentů v rámci volání funkce array(). Třešničkou na dortu je pak vestavěná struktura foreach, která se chová jako for-cyklus, procházející přes všechny položky pole. Viz kapitola „Řídící struktury“, podkapitola „Cykly“. Další poměrně častou operací prováděnou nad poli je hledání konkrétního prvku (pochopitelně nikoli podle klíče, ale podle hodnoty). Existuje funkce in_array(), která zjišťuje, zda se daná hodnota v poli nachází, či nikoli. Prvky pole je občas potřeba přerovnat. K dispozici máme celou řadu funkcí třídících funkcí (sort(), usort(), asort(), ...), které se lehce liší podmínkami (zda se mají třídit pouze hodnoty, nebo i klíče, kterým směrem se má třídit apod.). Opačnou službu pak poskytne funkce shuffle(), která náhodně prohází prvky pole.
© Martin Kruliš – pouze ke studijním účelům
strana 10 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí Jak již bylo zmíněno, pole lze používat také jako frontu, nebo zásobník. Pro pohodlnou práci s těmito strukturami pak slouží několik funkcí. Funkce array_push() přidá prvek na konec pole, analogicky array_pop() prvek z konce pole odebere. Obdobně funkce array_unshift() přidá prvek na začátek pole a array_shift() tento prvek odstraní. Na závěr bych ještě zmínil funkci array_merge(), která spojí dvě (případně i více) pole dohromady tak, aby klíče zůstaly unikátní. Při kolizi klíčů se použije hodnota ve druhém (resp. nejpozději uvedeném na seznamu parametrů) poli.
6. Objekty Syntaxe a princip fungování objektů se značně liší mezi verzemi PHP. První pokus o zakomponování objektů do jazyka učinilo PHP 4. Tento pokus nebyl příliš úspěšný a až PHP verze 5 přineslo rozumný návrh tříd a objektů – těmi se právě budeme zabývat. Silně nedoporučujeme používat objekty v PHP verze 4. Toto téma je bohužel značně rozsáhlé a tento text vzniká v určité časové tísni. Z tohoto důvodů je prozatím popis objektů a tříd v PHP vynechán a bude doplněn v budoucích verzích textu. Přehledný popis jejich fungování naleznete v manuálu PHP.
7. Reference 7.1 Základní informace a vytváření referencí Reference byly lehce nakousnuty na závěr kapitoly „Funkce“. Nyní se na ně podíváme trochu podrobněji. Nejprve položme otázku, co jsou to vlastně reference. Reference jsou odkazy, které umožňují přistupovat ke stejnému obsahu (stejným datům) z různých proměnných. Z hlediska programátora vypadá situace takto: Když změníte hodnotu jedné proměnné, změní se i všem ostatním. Proměnné v PHP si lze představit obdobně jako asociativní pole. Je to tabulka s položkami název – hodnota. Pokud přiřadíme jednu proměnnou do druhé (přiřazovacím operátorem =), vytvoří se v tabulce nový záznam, s novým názvem proměnné a hodnota se zkopíruje. Tím má každá proměnná vlastní hodnotu a při zápisu do jedné z nich zůstane hodnota té druhé nezměněna. Naopak při vytváření referencí se v tabulce nevytvoří nový záznam, pouze se ke stávajícímu záznamu přidá další název. Položka může mít libovolné množství těchto názvů, ale stále má jenu hodnotu. Je jasné, že pokud se tato hodnota změní (přístupem přes kteroukoli z proměnných), uvidí tuto změnu i všechny ostatní proměnné. Syntaxe referencí je jednoduchá a už jsme ji nastínili v kapitole „Funkce“. Před proměnnou, jejíž referenci chceme získat, stačí uvést operátor &. Tímto způsobem lze získat reference nejen na proměnné, ale třeba i na položky pole. Příklad 17: $a = 3; $b = &$a; $b++; echo($a);
// vytvoříme referenci na proměnnou $a // změníme hodnotu $b, ale změna se projeví i pro $a // vypíše 4 (což je nová hodnota $a i $b)
$pole = array(3, 42, 54); $polozka = &$pole[1]; // také můžeme vytvořit ref. na jednu položku pole
7.2 Rušení referencí Reference se ruší příkazem unset(). Do teď jsme říkali, že unset() ruší proměnné. To není tak docela přesné, neboť unset() pouze odstraní název proměnné z tabulky proměnných. Hodnota se odstraní až v případě, že na ni neodkazuje žádná proměnná. Princip fungování je podobný například unixovému příkazu unlink.
© Martin Kruliš – pouze ke studijním účelům
strana 11 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí Příklad 18: $a = 42; $b = &$a; unset($a); unset($b);
// $a i $b teď ukazují na stejná data (hodnotu 42) // zrušením $a se nezruší $b, ani hodnota 42 // po zrušení $b na hodnotu 42 nic neodkazuje –> zruší se také
7.3 Používání referencí Reference se používají na celé řadě míst. Nejběžnější je použití při předávání parametrů funkcí (viz kapitola „Funkce“). Reference se ovšem používají v některých případech i automaticky, aniž by to programátor explicitně uváděl. Jako příklad poslouží používání globálních proměnných uvnitř funkcí. Jen zopakujeme, že globální proměnná se uvnitř funkce zpřístupní deklarací global. Tato deklarace je ovšem pouze zkratkou za referenci. Následující dva zápisy provedou totéž: global $x;
a
$x = &$GLOBALS['x'];
7.4 Rozdíl mezi referencemi a ukazateli Při práci s referencemi je třeba mít neustále na paměti, že reference nejsou ukazatele. V celé řadě situací se sice budou chovat stejně, avšak existují konstrukce, které nemusí s referencemi fungovat. Pro lepší pochopení je zde následující příklad. Příklad 19: $bar = 42; $spam = 54; function foo(&$var) { $var = &$GLOBALS['spam']; } foo($bar); Proti prvotním očekáváním se proměnná $bar vůbec nezmění. Když dojde k přiřazení do $var, nepřepíše se hodnota v něm uložená. Pouze se zruší reference $var (která se při zavolání funkce nastavila na hodnotu $bar) a nastaví se na globální proměnnou $spam. Původní proměnná $bar zůstane nedotčena. Pokud by se reference chovaly stejně jako ukazatele, přiřadila by se do $bar reference na $spam.
8. Přehled vybraných vestavěných funkcí PHP nabízí obrovské množství vestavěných funkcí (a tříd), které usnadňují programátorovu práci. Další funkce jsou pak dostupné v rozšiřujících modulech PHP. V tomto textu není zdaleka prostor popsat je všechny, a proto se zaměříme na ty opravdu nejdůležitější. Kompletní přehled těchto funkcí naleznete v manuálu PHP.
8.1 Funkce pro práci s řetězci Zpracování řetězců je, vzhledem ke způsobu použití jazyka PHP, jedním z nejčastěji používaných úkolů. Vestavěné knihovny obsahují širokou paletu funkcí pro práci s řetězci, vyhledávání textů nebo třeba zpracování regulárních výrazů. Zde je výběr několika nejzajímavějších. strlen($string) – Vrací délku řetězce $string ve znacích. strpos($haystack, $needle) – Vrací index prvního výskytu podřetězce $needle v řetězci $haystack. Znaky se indexují od 0. Pokud není podřetězec nalezen, vrací false. strcoll($str1, $str2) – Porovná řetězce $str1 a $str2 podle místních zvyklostí (jazyka). Vrací číslo menší než 0, pokud je $str1 menší, právě číslo 0, pokud jsou řetězce stejné a číslo větší než 0, pokud je $str1 větší, než $str2. trim($str) – Vrací řetězec $str bez okrajových bílých znaků. © Martin Kruliš – pouze ke studijním účelům
strana 12 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí substr($str, $start, $len) – Vrací podřetězec řetězce $str od offsetu $start (indexuje se od 0) délky $len. strtolower($str) – Převede všechna velká písmena v řetězci $str na malá a výsledek vrátí. Existuje analogická funkce strtoupper(), která naopak převádí všechna písmena na velká.
8.2 Regulární výrazy Následující funkce jsou zvláštní tím, že pracují s regulárními výrazy. Regulární výraz je řetězec – šablona, podle které lze porovnávat jiné řetězce. Výsledkem takového porovnání může být pouze pravdivostní informace (řetězec vyhovuje/nevyhovuje), případně se dají regulární výrazy použít pro vyhledávání v řetězcích, nahrazování, nebo dokonce získávání podřetězců. Než si představíme funkce samotné, shrneme stručně syntax regulárních výrazů. Pro úplnou referenci regulárních výrazů doporučuji nahlédnout do manuálových stránek regex(7) na libovolném unixu. Regulární výrazy v PHP odpovídají standardu POSIX-extended. Libovolné znaky, které nemají speciální význam (např. písmena), jsou brány jako hledané znaky. Tj. regulárnímu výrazu 'Pepa', budou odpovídat všechny řetězce, které obsahují podřetězec 'Pepa' (např. 'Tady bydlí Pepa Novák.'). V předchozím příkladu se mohl zmíněný podřetězec vyskytovat kdekoli v prohledávaném řetězci. Někdy může být potřeba prohledávat pouze začátek, nebo konec řetězce. K tomu slouží symboly ^ (začátek) a $ (konec). Výraz '^ing' bude odpovídat řetězci 'ing. Pepa Novák', ale už ne řetězci 'Josef King', protože 'ing' v něm není na začátku. Analogicky 'ová$' bude odpovídat řetězci 'Alena Nováková', ale už ne třeba 'Jiří Sovák', protože Sovák (jako každý správný chlap) nemá 'ová' na konci svého příjmení. Místo pevně daných znaků lze doplnit znak '.', který funguje jako žolík - zastupuje libovolný jeden znak. Tedy např. 'p.s' bude odpovídat řetězcům 'hlídací pes' nebo 'cestovní pas', ale už ne třeba 'prasátko', protože mezi 'p' a 's' musí být právě jedno písmeno. Obdobně můžeme dát na výběr z pevně dané množiny znaků. Tato množina musí být uzavřena v hranatých závorkách. Mohou se v ní používat také intervaly znaků (např. všechna malá písmena můžeme zapsat jako '[a-z]'). Výraz '^[Hh]roch$' odpovídá pouze řetězcům 'hroch' a 'Hroch'. Případně '\$[a-zA-Z0-9_]' odpovídá všem jednopísmenným proměnným zapsaným v kódu PHP. Vyhledávat lze také doplněk množiny. Doplněk je uvozen znakem ^ (uvnitř hranatých závorek) a následuje seznam znaků, které se na daném místě nesmí vyskytnout. Např. '[^0-9]' představuje libovolný znak kromě číslice. Regulární výraz, nebo podvýraz uzavřený do kulatých závorek, může být složen z několika možností. Tyto možnosti jsou samy o sobě regulární výrazy a oddělují se svislítkem |. Aby řetězec vyhovoval takovémuto regulárnímu výrazu, stačí, aby vyhovoval některé z jeho možností. Např. 'malý|velký|tlustý|tenký' bude vyhovovat řetězcům 'malý Bobeš', 'velký Manitou' i 'tenký led'. Vzor '(vý|Ná|zá)chod' bude odpovídat řetězcům 'východ', 'Náchod', ale i 'záchod'. Každý atom (základní kus výrazu, který představuje znak, množinu znaků, nebo podvýraz uzavřený do kulatých závorek), lze nechat opakovat. Existují tři speciální symboly (*, + a ?), které se uvádí za atomem a určují počet opakování. Znak * zastupuje libovolný počet opakování (včetně 0-krát), znak + má stejný význam, ale daný atom se musí opakovat alespoň jedenkrát. Symbol ? označuje možné vypuštění – jinými slovy povoluje pouze opakování 0 nebo 1 krát. Například 'Aho+j' bude vyhovovat řetězcům 'Ahoj' i 'Ahooooj', '.*' bude vyhovovat libovolnému řetězci (včetně prázdného). Vzor '^(ne)?lehký$' bude vyhovovat pouze řetězcům 'lehký' a 'nelehký'. Pokud potřebujeme nějaký konkrétní počet opakování, můžeme tento počet uvést do složených závorek za opakovaný atom (např. '[0-9]{4}' odpovídá čtyřcifernému číslu, které ovšem může mít na začátku nuly). Také můžeme uvést rozsah dvou čísel (minimální a maximální počet opakování). Pokud maximální počet vynecháme, je brán jako nekonečno. Výraz '[a-z]{0,1}' je stejný jako '[a-z]?', případně '[0-9]{1,}' je totéž jako '[0-9]+'. Nyní si představíme funkce pro práci s řetězci pomocí regulárních výrazů. ereg($ptrn, $str, [$regs]) – Otestuje, zda řetězec $str vyhovuje regulárnímu výrazu $ptrn. Uvnitř regulárního výrazu mohou navíc být ohraničeny části řetězce, které se zkopírují do pole $regs. Úplně stejně funguje také funkce eregi(), která ale není case-sensitivní. © Martin Kruliš – pouze ke studijním účelům
strana 13 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí ereg_replace($ptrn, $replace, $str) – Nahradí všechny výskyty vzoru $ptrn řetězcem $replace uvnitř řetězce $str a výsledek předá jako návratovou hodnotu. Existuje také funkce eregi_replace(), která funguje stejně, ale není case-sensitivní. split($ptrn, $str, [$limit]) – Rozdělí řetězec $str do pole řetězců, které předá jako návratovou hodnotu. Jako oddělovač se použije regulární výraz $ptrn. Nepovinný parametr $limit určuje maximální počet položek v poli (zbylé, které překračují limit, jsou odstraněny). Příklad 20: if (ereg('^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})$', $date, $regs)) echo('Platné datum. Den: ' . $regs[1] . ', měsíc: ' . $regs[2] . ', rok: ' . $regs[3]); else echo('Datum není v platném formátu.'); // rozdělí řetězec na slova a uloží je do pole $words = split("[ \t\n\r]+", $str); $str = ereg_replace('<[^>]*>', '', $str);
// odstraní z textu $str tagy
8.3 Funkce pro práci se soubory Rozhraní pro práci se soubory je velice podobné rozhraní v jazyce C. Soubor je potřeba nejprve otevřít a získat tak handle na soubor. Všechny ostatní funkce pak potřebují tento handle, aby s ním mohly pracovat. fopen($fileName, $mode) – Otevře soubor a vrací handle na něj. Parametr $mode určuje, jak má být soubor otevřen (zápis je totožný jako v jazyce C). Funkce vrací false, pokud soubor nelze otevřít požadovaným způsobem. fclose($fp) – Zavře soubor a zruší platnost jeho $fp handle. fread($fp, $len) – Přečte $len bytů od aktuální pozice ze souboru s $fp handle a vrátí je jako řetězec. V případě, že je v souboru méně bytů než $len, vrátí všechna data ze zbytku souboru. Zároveň posune vnitřní ukazatel za data, která právě přečetl. fwrite($fp, $str, [$len]) – Zapíše do souboru s handle $fp na aktuální pozici řetězec $str. Pokud je uveden parametr $len, zapíše pouze prvních $len znaků z řetězce $str. Zároveň posune vnitřní ukazatel za data, která právě zapsal. ftell($fp) – Vrací aktuální pozici vnitřního ukazatele ze souboru $fp. fseek($fp, $offset) – Nastaví aktuální pozici vnitřního ukazatele v souboru $fp na daný $offset. Funkcí, které pracují se soubory, je celá řada a všechny se sem nevejdou. Na ukázku ještě uvedeme dvě zajímavé funkce, které nepotřebují handle vracený fopen(), ale vystačí si s názvem (cestou k) souboru. filesize($fileName) – Vrací velikost souboru v bytech. file($fileName) – Načte celý textový soubor jako pole, kde každý řádek v souboru je uložen jako samostatný prvek pole.
8.4 Funkce pro práci s databázi MySQL Pro práci s databázi MySQL existuje v PHP rozšíření mysql, které implementuje kompletního databázového klienta. Obdobně jako u souborů, i zde funguje mechanismus použití handle, který reprezentuje spojení s databází (díky tomu lze otevírat více spojení – třeba i k různým databázím) . V případě, že chcete použít jen jedno MySQL spojení, nemusí se tento handle (u funkcí bývá uveden jako $link) uvádět – funkce si ho zjistí samy. mysql_connect($server, $user, $password) – Připojí se k zadanému serveru ($server může být doménový název, nebo IP adresa) se zadaným uživatelským jménem a heslem. Vrací handle reprezentující spojení s databází. Pokud se spojení nezdaří, vrací false.
© Martin Kruliš – pouze ke studijním účelům
strana 14 z 15
Škola učitelů informatiky Lipnice nad Sázavou, 16.8.2010 – 26.8.2010
PHP – stručná reference syntaxe a funkcí mysql_select_db($dbname, [$link]) – Vybere databázi na daném MySQL serveru. Všechny ostatní příkazy pak pracují s touto databází. mysql_query($query, [$link]) – Pošle SQL dotaz na server. V případě SELECT dotazu vrací speciální resource, který lze dále zpracovat funkcemi mysql API. U ostatních dotazů vrací true, pokud se dotaz povede. Pokud dotaz selže, vrací vždy false. mysql_errno([$link]) – Vrací číslo chyby, která nastala při posledním volání nějaké mysql funkce, případně nulu, pokud nenastala žádná chyba. mysql_error([$link]) – Vrací řetězec s poslední chybovou hláškou, případně prázdný řetězec, pokud žádná chyba nenastala. mysql_real_escape_string($query, [$link]) – Ošetří řetězec $query, aby v něm nebyly znaky, které nelze použít v SQL dotazu. Všechny hodnoty (zvláště pak ty získané od uživatele – např. z formuláře) by měly být před vložením do SQL dotazu takto ošetřeny, aby se předešlo SQL-injection útokům. mysql_fetch_assoc($result) – Načte další řádek z výsledku SQL dotazu a vrátí jej jako pole. Jednotlivé buňky jsou indexovány názvy sloupců (z SQL dotazu). Existují i jiné mysql_fetch_ funkce, které vrací řádky v jiných formátech. Jako v jiných kapitolách, ani zde není uveden kompletní výčet všech funkcí. Zbylé je možné nalézt v dokumentaci.
8.5 Co PHP ještě umí... Jazyk PHP má celou řadu vestavěných funkcí (resp. knihoven). Zde uvádíme namátkou pouze jejich neúplný výčet. Navíc existují i externí knihovny a frameworky, které tyto funkce ještě rozšiřují. Za všechny jmenujme snad jen PEAR (PHP Extension and Application Repository), což je celý archív různých komonent, nebo Zend framework – populární knihovna, jejíž vývoj zaštiťuje přímo firma Zend (odpovědná za vývoj jádra PHP). Zde je slíbený (neúplný) výčet možností PHP. •
cookies, sessions
•
práce s nejrůznějšími databázovými systémy (MSSQL, PostgreSQL, Oracle, ODBC, ...)
•
síťové funkce (TCP, UDP, HTTP, FTP, SMTP, POP3, IMAP, ...)
•
funkce pro práci s texty (převody znakových sad, překlady)
•
matematické funkce, práce s libovolně velkými (přesnými) čísly
•
funkce pro práci s XML dokumenty
•
práce s obrázky, PDF dokumenty ...
•
komprese, kryptografie
9. Závěr aneb co se jinam nevešlo Na závěr ještě doplňme pár slov o PHP jako takovém. PHP není jediným skriptovacím jazykem, který je určen pro psaní webových aplikací. Existuje celá řada jiných jazyků, které mají také své přednosti i nedostatky (Java, ASP, Perl, Python, Ruby, ...). Pro PHP však mluví jeho jednoduchost a masové rozšíření na webhostingových serverech. Kromě toho existují i projekty, které umožňují použít PHP např. s grafickými knihovnami GTK+ a vytvářet tak čistě desktopové aplikace. PHP lze získat na stránkách www.php.net, kde kromě nejrůznějších instalačních balíčků naleznete i kompletní dokumentaci (ta se s malým zpožděním objevuje i v českém jazyce).
© Martin Kruliš – pouze ke studijním účelům
strana 15 z 15