PHP
Obsah boxu
Šablona:Infobox - programovací jazyk PHP (rekurzivní zkratka pro PHP: Hypertext Preprocessor, původně Personal Home Page Tools) je široce používaný, open-source skriptovací jazyk, který je navržen především pro webový vývoj. Lze jej vkládat přímo do HTML kódu. Jeho syntaxe je inspirována jazyky jako C, Java a Perl.
PHP kód je obvykle zpracováván na webovém serveru pomocí PHP interpretu, který je implementován jako modul serveru nebo jako samostatný CGI spustitelný soubor. Výsledkem je vygenerovaná webová stránka, kterou server odešle klientovi. PHP lze také používat pro skriptování z příkazové řádky a pro tvorbu desktopových aplikací, i když to není jeho primární určení.
Díky své jednoduchosti, široké podpoře u webhostingových společností a obrovskému ekosystému se PHP stalo jedním z nejdominantnějších jazyků pro tvorbu dynamických webových stránek a aplikací. Pohání některé z největších projektů na internetu, včetně redakčního systému WordPress, sociální sítě Facebook (prostřednictvím svého dialektu Hack) a encyklopedie Wikipedie (prostřednictvím softwaru MediaWiki).
📜 Historie
Vývoj PHP lze rozdělit do několika klíčových ér, které odrážejí jeho postupnou transformaci z jednoduchého nástroje na plnohodnotný programovací jazyk.
👶 Počátky a PHP/FI (1994–1998)
Historie PHP začala v roce 1994, kdy dánsko-kanadský programátor Rasmus Lerdorf vytvořil sadu CGI skriptů v jazyce C pro sledování návštěvnosti svého online životopisu. Tuto sadu nástrojů nazval Personal Home Page Tools, zkráceně PHP Tools. Postupně přidával další funkce a nakonec přepsal jádro tak, aby dokázalo komunikovat s databázemi a umožnilo uživatelům vytvářet jednoduché dynamické webové aplikace.
V roce 1995 Lerdorf zveřejnil zdrojový kód PHP Tools, což umožnilo ostatním vývojářům jej používat a vylepšovat. V roce 1997 byla vydána druhá verze, známá jako PHP/FI (Personal Home Page/Forms Interpreter), která již obsahovala základní rysy moderního PHP, ale stále byla velmi procedurální a omezená.
🚀 Vzestup a PHP 3/4 (1998–2004)
Zásadní zlom nastal v roce 1998, kdy dva izraelští studenti, Zeev Suraski a Andi Gutmans, přepsali celé jádro jazyka. Cílem bylo vylepšit výkon a modularitu pro jejich univerzitní e-commerce projekt. Nové jádro nazvali Zend Engine (složenina jejich jmen Zeev a Andi) a na jeho základě vydali PHP 3. Tato verze definovala syntaxi a funkce, které se staly základem pro další vývoj, a zavedla podporu pro objektově orientované prvky.
V roce 2000 bylo vydáno PHP 4, poháněné novým a výkonnějším Zend Engine 1.0. Tato verze přinesla výrazné zlepšení výkonu, podporu pro více webových serverů, sessions, a bezpečnější zpracování uživatelských vstupů. PHP 4 se stalo masivně populárním a na začátku 21. století pohánělo miliony webových stránek.
🏛️ Éra PHP 5 a objektové programování (2004–2014)
PHP 5, vydané v červenci 2004, bylo dalším obrovským krokem vpřed. Běželo na Zend Engine II a přineslo kompletně přepracovaný objektový model, který se inspiroval jazykem Java. Zahrnoval prvky jako modifikátory přístupu (public, protected, private), abstraktní a finální třídy a metody, rozhraní a standardizované zpracování výjimek. Klíčovou novinkou bylo také rozšíření PHP Data Objects (PDO), které poskytlo jednotné rozhraní pro přístup k různým typům databází.
Během této éry se také objevil projekt PHP 6, jehož hlavním cílem byla nativní podpora Unicode. Projekt se však potýkal s velkými obtížemi a nakonec byl v roce 2010 opuštěn. Mnoho jeho plánovaných funkcí bylo postupně implementováno do větví PHP 5.x.
⚡ Renesance s PHP 7 (2015–2019)
Po dlouhém období stagnace přišlo v prosinci 2015 PHP 7, které znamenalo revoluci. Verze 6 byla přeskočena, aby se předešlo zmatkům s neúspěšným projektem. PHP 7 bylo postaveno na novém jádře Zend Engine 3 (kódově označovaném PHP-NG - Next Generation) a přineslo dramatické zvýšení výkonu (často dvojnásobné oproti PHP 5.6) a snížení paměťové náročnosti.
Kromě výkonu přidalo PHP 7 klíčové syntaktické prvky, jako jsou deklarace skalárních typů (int, float, string, bool), deklarace návratových typů funkcí, operátor `??` (null coalescing) a operátor `<=>` (spaceship).
💎 Moderní éra PHP 8 (2020–současnost)
V listopadu 2020 bylo vydáno PHP 8, které pokračovalo v modernizaci jazyka. Mezi hlavní novinky patřil JIT (Just-In-Time) kompilátor, který sliboval další zvýšení výkonu pro specifické typy úloh, atributy (známé jako anotace v jiných jazycích), union types, pojmenované argumenty, operátor `?->` (nullsafe) a výraz `match`.
Následovaly verze PHP 8.1, 8.2 a 8.3, které přinesly další vylepšení jako enums, `readonly` vlastnosti, fibers (pro asynchronní programování) a další typová zpřesnění. PHP se definitivně etablovalo jako moderní, výkonný a robustní jazyk s pravidelným ročním cyklem vydávání nových verzí.
⚙️ Syntaxe a klíčové vlastnosti
PHP má syntaxi, která je velmi podobná jazykům C, Java a Perl, což usnadňuje přechod programátorům z těchto jazyků.
📝 Základní syntaxe
PHP skripty jsou vkládány do HTML dokumentů pomocí značek `<?php` a `?>`.
<!DOCTYPE html>
<html>
<head>
<title>PHP Příklad</title>
</head>
<body>
<h1><?php echo "Vítejte na mé stránce!"; ?></h1>
<p>Aktuální datum a čas je: <?php echo date('Y-m-d H:i:s'); ?></p>
</body>
</html>
- **Proměnné:** Vždy začínají znakem dolaru (`$`), např. `$jmeno = "Alice";`.
- **Příkazy:** Jsou ukončeny středníkem (`;`).
- **Komentáře:** Jednořádkové pomocí `//` nebo `#`, víceřádkové pomocí `/* ... */`.
- **Citlivost na velikost písmen:** Názvy proměnných jsou citlivé na velikost písmen (`$vek` a `$Vek` jsou dvě různé proměnné), zatímco názvy funkcí a tříd většinou nejsou.
📦 Datové typy
PHP je dynamicky typovaný jazyk, což znamená, že typ proměnné není nutné explicitně deklarovat. Od verze 7 však podporuje i striktní typování.
- **Skalární typy:** `integer` (celé číslo), `float` (desetinné číslo), `string` (řetězec), `boolean` (pravda/nepravda).
- **Složené typy:** `array` (pole), `object` (objekt).
- **Speciální typy:** `null`, `resource` (speciální proměnná odkazující na externí zdroj, např. soubor nebo databázové připojení).
PHP pole (`array`) jsou obzvláště silná, protože mohou fungovat jako klasická indexovaná pole, asociativní pole (mapy) nebo kombinace obojího.
🧑💻 Objektově orientované programování (OOP)
Moderní PHP je silně zaměřeno na objektově orientované programování. Podporuje všechny klíčové koncepty:
- **Třídy a objekty:** `class Uzivatel { ... }`, `$novy_uzivatel = new Uzivatel();`
- **Dědičnost:** `class Admin extends Uzivatel { ... }`
- **Zapouzdření:** Pomocí modifikátorů `public`, `protected` a `private`.
- **Polymorfismus:** Prostřednictvím rozhraní a abstraktních tříd.
- **Traity:** Mechanismus pro znovupoužití kódu v nezávislých třídách.
🌐 Práce s webem
PHP bylo od základu navrženo pro web, a proto obsahuje mnoho vestavěných funkcí a proměnných pro usnadnění práce s HTTP protokolem.
- **Superglobální proměnné:** Jsou dostupné v každém skriptu a obsahují informace o požadavku. Mezi nejdůležitější patří `$_GET` (data z URL), `$_POST` (data z formulářů), `$_FILES` (nahrané soubory), `$_COOKIE` (data z cookies) a `$_SESSION` (data relace).
🗃️ Připojení k databázím
PHP nabízí robustní podporu pro práci s databázemi. Moderní přístupy jsou:
- **PDO (PHP Data Objects):** Poskytuje jednotné rozhraní pro přístup k mnoha typům databází (např. MySQL, PostgreSQL, SQLite, Microsoft SQL Server). Umožňuje snadnou změnu databázového systému a chrání proti SQL injection pomocí připravených dotazů.
- **MySQLi (MySQL Improved):** Rozšíření specifické pro databázi MySQL, které nabízí procedurální i objektově orientované rozhraní.
Starší funkce `mysql_*` jsou zastaralé a od PHP 7.0 byly odstraněny kvůli bezpečnostním rizikům.
🌳 Ekosystém a nástroje
Kolem PHP vznikl za desítky let obrovský a vyspělý ekosystém nástrojů, knihoven a komunit.
📦 Composer – Správce závislostí
Composer je de facto standardem pro správu závislostí v PHP projektech. Umožňuje vývojářům deklarovat knihovny, na kterých jejich projekt závisí, a Composer se postará o jejich instalaci a aktualizaci. Centrální repozitář balíčků se nazývá Packagist.
🏗️ Frameworky
Frameworky poskytují strukturu a sadu nástrojů pro rychlejší a organizovanější vývoj aplikací. Mezi nejpopulárnější PHP frameworky patří:
- **Laravel:** V současnosti nejpopulárnější framework, známý pro svou elegantní syntaxi, bohatou sadu funkcí (ORM Eloquent, šablonovací systém Blade) a silný ekosystém.
- **Symfony:** Robustní a flexibilní framework založený na znovupoužitelných komponentách. Mnoho jiných projektů (včetně Laravelu a Drupalu) využívá právě Symfony komponenty.
- **CodeIgniter:** Lehký a rychlý framework s minimální konfigurací, vhodný pro menší aplikace.
- **Laminas (dříve Zend Framework):** Podnikový framework zaměřený na modularitu a osvědčené postupy.
🗂️ Systémy pro správu obsahu (CMS)
PHP je základním kamenem nejrozšířenějších CMS na světě:
- **WordPress:** Absolutní lídr na trhu, pohání přes 40 % všech webových stránek. Původně blogovací platforma, dnes plnohodnotný CMS.
- **Joomla:** Flexibilní a výkonný CMS vhodný pro komplexnější weby a portály.
- **Drupal:** Velmi robustní a škálovatelný systém, oblíbený pro velké podnikové a vládní projekty.
🤝 PHP-FIG a PSR standardy
PHP Framework Interoperability Group (PHP-FIG) je skupina zástupců různých PHP projektů, která vytváří standardy zvané PHP Standard Recommendations (PSR). Cílem těchto standardů je zajistit, aby kód z různých frameworků a knihoven mohl spolupracovat. Mezi klíčové PSR patří PSR-4 (automatické načítání tříd), PSR-7 (rozhraní pro HTTP zprávy) nebo PSR-12 (rozšířený styl zápisu kódu).
💪 Silné a slabé stránky
👍 Výhody
- **Nízká vstupní bariéra:** Jazyk je relativně snadné se naučit.
- **Obrovská komunita a dokumentace:** Existuje nespočet tutoriálů, fór a knihoven. Oficiální dokumentace je velmi kvalitní.
- **Široká dostupnost:** Téměř každý webhosting nabízí podporu PHP a MySQL.
- **Vyspělý ekosystém:** Nástroje jako Composer, moderní frameworky a tisíce knihoven usnadňují vývoj.
- **Výkon:** Moderní verze PHP (7 a 8) jsou velmi rychlé a efektivní.
👎 Nevýhody
- **Špatná pověst:** Jazyk si nese stigma z minulosti kvůli nekvalitnímu kódu, který umožňovala jeho benevolentní povaha, a nekonzistencím ve starších verzích.
- **Nekonzistence v jádře:** Starší části standardní knihovny mají nejednotné názvy funkcí a pořadí parametrů (např. `strpos()` vs. `array_search()`).
- **Dynamické typování:** Ačkoliv je pro někoho výhodou, může vést k chybám, které se projeví až za běhu aplikace. Moderní PHP tento problém zmírňuje zavedením striktní typové kontroly.
💡 Pro laiky
Představte si webovou stránku jako restauraci.
- **Vy (uživatel)** jste host.
- Váš **webový prohlížeč** (Google Chrome, Firefox) je číšník.
- **Server** (počítač, kde je web uložen) je kuchyně.
- **PHP** je kuchař v této kuchyni.
Když kliknete na odkaz nebo vyplníte formulář (objednáte si jídlo), váš číšník (prohlížeč) odnese objednávku do kuchyně (pošle požadavek na server). Kuchař (PHP) si přečte objednávku, vezme suroviny ze spíže (data z databáze), uvaří jídlo (vygeneruje HTML kód stránky přesně pro vás) a předá ho číšníkovi. Číšník (prohlížeč) vám pak hotové jídlo (webovou stránku) naservíruje. Bez kuchaře (PHP) by restaurace mohla podávat jen studená, předem připravená jídla (statické HTML stránky), ale nemohla by reagovat na vaše konkrétní přání.
🔮 Budoucnost jazyka
PHP pokračuje ve svém vývoji s pravidelným ročním cyklem vydávání nových verzí. Hlavní trendy směřují k dalšímu zlepšování výkonu, posilování typového systému pro větší robustnost kódu a přidávání moderních programovacích konstrukcí inspirovaných jinými jazyky. Komunita je stále velmi aktivní a ekosystém kolem jazyka neustále roste, což zajišťuje jeho relevanci i v budoucnosti webového vývoje.