Proč PHP stále patří k pilířům webu
PHP je dynamický skriptovací jazyk navržený především pro web. Díky jednoduchému nasazení, rozsáhlému ekosystému knihoven a vyspělé infrastruktuře hostingových služeb pohání miliony aplikací, od malých webů až po komplexní platformy. Moderní PHP využívá kompilaci do bajtkódu, optimalizace JIT/OPcache a silný typový systém s type hints, enums a attributes. Nabízí také robustní nástroje pro zabezpečení, testování i škálování.
Architektura běhu: webový server, PHP-FPM a runtime
Typické produkční nasazení využívá Nginx/Apache před PHP-FPM (FastCGI Process Manager). Webový server přijímá požadavky HTTP, předává je poolu procesů FPM a výsledné HTML/JSON vrací klientovi. Alternativou je „dlouho běžící“ server (Swoole, RoadRunner), v němž PHP uchovává stav aplikace v paměti a snižuje režii opakované inicializace. Volba runtime ovlivňuje latenci, propustnost, možnosti WebSocketů i integraci s event loopem (ReactPHP, Amp).
Výkonnostní stavební prvky: OPcache, JIT, cache a úložiště relací
OPcache ukládá zkompilované skripty do paměti a výrazně zkracuje dobu do prvního bajtu (time-to-first-byte). JIT přidává optimalizace na úrovni instrukcí procesoru u vybraných výpočetně náročných úloh. Aplikační cache (Redis/Memcached) urychluje čtení často používaných dat a omezuje přístupy k databázi. Sdílená úložiště relací (Redis, databáze) umožňují horizontální škálování bez „lepivých“ spojení.
Composer a ekosystém balíčků
Composer je standardní správce závislostí. Definuje verze v souboru composer.json, řeší sémantické verzování (semver), automatické načítání tříd (PSR-4) a poskytuje skriptovací háky. Packagist je centrální registr balíčků. Díky němu lze snadno přidávat HTTP klienty, ORM, šablonovací enginy, kontejnery DI či integrační konektory. Zamykací soubor composer.lock fixuje přesné verze pro reprodukovatelné sestavení.
Standardy PSR: společný jazyk frameworků
PHP-FIG definuje doporučení PSR, která zvyšují interoperabilitu: PSR-1/12 (styl a základy), PSR-3 (logování), PSR-4 (automatické načítání tříd), PSR-6/16 (cache), PSR-7 (zprávy HTTP), PSR-11 (kontejner), PSR-14 (události), PSR-15 (middleware), PSR-17 (HTTP továrny) a PSR-18 (HTTP klient). Frameworky a knihovny, které standardy PSR dodržují, lze flexibilně kombinovat.
Co je webový framework a proč ho používat
Framework poskytuje základní strukturu aplikace: směrování (routing), kontrolery, validaci, šablony, vrstvu ORM/DB, kontejner DI, middleware, autentizaci a autorizaci, práci s frontami, e-mailem a úložištěm. Zrychluje vývoj, sjednocuje postupy a snižuje riziko chyb. Důraz se klade na testovatelnost, bezpečnost a provozní stabilitu.
Hlavní typy PHP frameworků
Existují „full-stack“ frameworky, které nabízejí vše v jednom balíku (Laravel, Symfony, Nette, Laminas), a „mikroframeworky“ určené pro minimalistická API (Slim, Lumen, Mezzio). Full-stack přístup přináší pohodlí a integrace, mikroframeworky zase svobodu a menší režii. Volba závisí na doméně, týmu a požadavcích na SLA, škálování a dobu uvedení na trh.
Laravel: produktivita a ekosystém
Laravel sází na elegantní syntaxi a bohatý ekosystém: ORM Eloquent, šablony Blade, CLI Artisan, systém migrací, fronty (Horizon), plánovač (Scheduler), vysílání událostí (WebSockety), Cashier (platby), Scout (fulltextové vyhledávání), Passport/Sanctum (autentizace API), Octane (Swoole/RoadRunner), Livewire a Inertia pro rychlé vytváření uživatelského rozhraní. Hodí se pro aplikace, v nichž má produktivita a konzistentnost přednost před architektonickým minimalismem.
Symfony: sada komponent a integrace pro podniková řešení
Symfony je sada robustních komponent (HttpFoundation, Console, Messenger, Workflow, Security), které tvoří základ i pro jiné frameworky. Ideálně se hodí pro podniková řešení, u nichž oceníte granularitu, přísnou konfiguraci, bohaté integrace (API Platform, Messenger s AMQP/Redis), bundles a dlouhodobou stabilitu.
Nette: bezpečnost, šablony Latte a čistá architektura
Nette klade důraz na bezpečnost (automatické escapování, ochrana proti XSS/CSRF), přehlednou architekturu a produktivní šablonovací engine Latte. Nabízí Tracy pro ladění, DI kontejner s kompilací do PHP a Forms s validací. Ve střední Evropě je oblíbené díky kombinaci jednoduchosti a důrazu na kvalitu kódu.
Laminas a Mezzio: nástupci Zend Frameworku
Laminas navazuje na Zend Framework. Mezzio (dříve Expressive) staví na přístupu založeném na middleware PSR-7/15 a umožňuje skládat aplikace z komponent s vysokou mírou kontroly nad vrstvou HTTP. Hodí se zejména pro projekty s přístupem API-first a integrační projekty.
Slim a mikroframeworky: minimalistické API
Slim je odlehčený HTTP router s middleware, vhodný pro mikroslužby, prototypy a služby s nízkou latencí. Díky kompatibilitě s PSR lze snadno podle potřeby přidat DI, šablony, validaci nebo ORM. Zastánci minimalismu oceňují transparentní skládání bez skrytého kouzlení.
Architektonické vzory: MVC, ADR, hexagonální architektura a CQRS
MVC odděluje model, pohled a kontroler. ADR (Action-Domain-Responder) lépe odráží životní cyklus požadavku a odpovědi HTTP. Hexagonální/čistá architektura izoluje doménu od frameworku a infrastruktury. CQRS odděluje čtení a zápis; v PHP se kombinuje s event sourcingem a sběrnicí zpráv (například Symfony Messenger pro obsluhu příkazů a událostí).
Databáze a perzistence: ORM, tvůrci dotazů a migrace
Nejběžnějším přístupem je ORM (Eloquent, Doctrine), které mapuje objekty na tabulky a umožňuje pracovat s relacemi. Alternativou jsou tvůrci dotazů (DBAL, Laravel Query Builder) nebo čisté SQL, které nabízí maximální kontrolu. Migrace a seedování verzují schéma a data. Pro NoSQL se používají klientské knihovny pro Redis, MongoDB, Elasticsearch a úložiště časových řad.
Validace, serializace a DTO
Validace vstupů chrání aplikaci i databázi. Formální validátory (Symfony Validator, pravidla Nette Forms) nebo atributy na třídách DTO zjednodušují automatické kontroly. Serializace (Symfony Serializer, json_encode s bezpečnými příznaky) zajišťuje převod doménových objektů na veřejné kontrakty API.
Šablonování a vykreslování na straně serveru
Blade (Laravel), Latte (Nette) a Twig (Symfony) nabízejí bezpečné šablonování s automatickým escapováním a komponentovým přístupem. Vykreslování na straně serveru (SSR) je stále důležité pro SEO, rychlé první vykreslení (first paint) a přístupnost. Integrace s Vite/Webpackem řeší sestavování prostředků, změnu identifikátorů cache (cache-bust) a moderní moduly ES.
API-first: REST, GraphQL a HATEOAS
REST je standardem pro JSON API s verzováním, stránkováním a konvencemi HAL/JSON:API. GraphQL umožňuje flexibilní dotazování a agregaci; v PHP jsou k dispozici servery a knihovny (například pro Symfony). Middleware řeší CORS, omezení počtu požadavků a vyjednávání obsahu. Důležité jsou jasné schéma a kontrakty i zpětně kompatibilní vývoj.
Bezpečnost: od vstupu až po hlavičky
Bezpečnostní opatření zahrnují ochranu proti CSRF, správné escapování (HTML, URL, JS, atributy), připravené příkazy proti SQLi, omezení velikosti nahrávaných souborů a validaci MIME typů a přípon. Cookies nastavujte s příznaky HttpOnly, Secure a SameSite. Zásady zabezpečení obsahu (CSP), HSTS a omezení vkládání do rámců (X-Frame-Options) chrání prohlížeč. Pozor na SSRF prostřednictvím neověřených URL a na mass assignment v ORM.
Autentizace a autorizace
Systémy nabízejí guardy, providery a modely rolí a oprávnění. OAuth 2.0/OIDC se používá pro delegovanou identitu, JWT/neprůhledné tokeny pro API. Dvoufaktorová autentizace (TOTP/WebAuthn) posiluje ochranu účtů. Na straně serveru ukládejte hesla pomocí Argon2/BCrypt a pro jejich průběžné přehashování používejte password_needs_rehash.
Testování a kvalita kódu
Jednotkové a integrační testy se píší v PHPUnit či Pest. Funkční testy využívají HTTP klienty a databázi v paměti (in-memory). Statická analýza (PHPStan, Psalm) kontroluje typy a okrajové případy. Nástroje pro automatické úpravy kódu (PHP-CS-Fixer, Codesniffer) pomáhají dodržovat jednotný styl. Kontraktní testy a snímky (snapshoty) brání regresím v API.
Logování, monitoring a observabilita
Monolog je de facto standardem pro logování a nabízí obslužné moduly pro soubory, syslog, cloudové služby i strukturovaný formát JSON. Metriky (Prometheus) a trasování (OpenTelemetry) poskytují přehled o latencích, chybovosti a závislostech. Korelační ID a MDC/CLS pomáhají sledovat požadavky napříč službami.
Fronty, plánování a asynchronní zpracování
Fronty (Redis, RabbitMQ, SQS) oddělují uživatelské požadavky od náročných úloh (vykreslování PDF, odesílání e-mailů, integrace). Pracovní procesy (workers) zajišťují opakování úloh s exponenciálním prodlužováním intervalů a deduplikaci. Plánovače (cron, plánovač frameworku) spouštějí úlohy v určený čas. Architektura řízená událostmi umožňuje škálování a snižuje míru provázanosti.
Konfigurace, tajemství a prostředí
Konfigurace v souboru .env nepatří do repozitáře. Tajemství ukládejte do trezorů. Rozdělte prostředí (dev/test/stage/prod), display_errors zapínejte jen ve vývojovém prostředí a v produkci používejte logování a monitoring. Neměnné sestavení a principy 12-factor usnadňují CI/CD.
Nasazení, kontejnery a škálování
Standardem je Nginx + PHP-FPM v kontejneru s vícestupňovým sestavením. Reverzní proxy (Traefik, Nginx) zajišťuje TLS a směrování. Horizontální škálování zajišťují Kubernetes/Swarm; aplikace jsou bezstavové a relace i cache se ukládají v externích službách. Postupné nasazení nebo nasazení typu blue-green minimalizuje výpadky, kontroly stavu zabraňují zařazení nefunkčních instancí do poolu.
Migrace a životní cyklus aplikace
Databázové migrace a seedování musí být součástí CI/CD. Při přechodu na hlavní verzi knihovny využijte protokoly o zastarávajících funkcích (deprecation) a rector pro automatizovaný refaktoring. Sledujte verze frameworků s dlouhodobou podporou (LTS), plánujte aktualizace runtime PHP a nezanedbávejte kompatibilitu rozšíření (ext-intl, ext-gd, ext-swoole apod.).
Doménový návrh a modularita
Oddělte doménovou logiku od frameworku. Vytvářejte moduly nebo ohraničené kontexty (bounded contexts) s vlastním API a datovým modelem. V úložištích skryjte detaily perzistence a do domény injektujte rozhraní. Omezte používání „božských služeb“ a dávejte přednost malým, úzce zaměřeným třídám use-case. Testy domény jsou rychlé a stabilní, protože běží bez infrastruktury.
Dokumentace a DX (vývojářská zkušenost)
Popište API pomocí OpenAPI/Swagger, generujte klienty a kontraktní testy. V repozitáři udržujte soubory README, CONTRIBUTING, Makefile nebo skripty Composeru pro běžné úlohy. Lokální vývoj usnadní docker-compose s databází, cache a nástrojem pro zachytávání e-mailů. Rychlé zapracování nových členů týmu ušetří při jeho rozšiřování desítky hodin.
Časté anti-patterny a jak se jim vyhnout
Nepřenášejte schéma relační databáze do ORM v poměru „1:1“ bez ohledu na konkrétní případ použití; dotazy N+1 řešte pomocí eager loadingu a indexů. Neumisťujte obchodní logiku do kontrolerů, ale přesouvejte ji do doménových služeb. Neignorujte chybové stavy při vstupu a výstupu, používejte výjimky nebo typy result. Nezáviste na globálním stavu, dávejte přednost explicitním závislostem a injektování závislostí (DI).
Kdy zvolit který framework
Pro rychlé dodávání produktů a bohatý ekosystém zvažte Laravel. Pro podniková řešení a modulární komponenty s dlouhodobou stabilitou zvolte Symfony. Pro aplikace, u nichž je kladen důraz na bezpečnost šablon a ergonomii uživatelského rozhraní, se hodí Nette. Pro minimalistická API vyhoví Slim/Mezzio. Důležitější než „značka“ je však disciplinovaný návrh, testování a provozní praxe.
Závěr
Moderní PHP a jeho frameworky představují vyspělou platformu pro budování udržitelných a výkonných webových služeb. Při respektování standardů PSR, důrazu na bezpečnost, testování a observabilitu a s promyšlenou architekturou aplikace dosáhnete vysoké kvality bez ohledu na to, zda vytváříte e-shop, interní systém, veřejné API nebo složitý portál. Klíčové je myslet na škálování, provoz a ergonomii pro vývojáře už při prvních řádcích kódu.
