Proč nemám rád objektové PHP

Mnozí programátoři a „programátoři“ se staví k OOP (objektově orientované programování ne „Organizace pro Osvobození Palestiny“) jako k všeléku na všechny jejich problémy při vývoji. Mnozí, i přestože používají plně objektový jazyk, píší neobjektový kód, kdy vše co potřebují napíší do jediného objektu a vytvoří pouze strukturovaný kód.

Jaké jsou výhody používání OOP?

Objektově orientované programování stojí na několika pilířích:

  • Objekty – jednotlivé prvky modelované reality (jak data, tak související funkčnost) jsou v programu seskupeny do entit, nazývaných objekty. Objekty si pamatují svůj stav a navenek poskytují operace (přístupné jako metody pro volání).
  • Abstrakce – programátor, potažmo program, který vytváří, může abstrahovat od některých detailů práce jednotlivých objektů. Každý objekt pracuje jako černá skříňka, která dokáže provádět určené činnosti a komunikovat s okolím, aniž by vyžadovala znalost způsobu, kterým vnitřně pracuje. Toto je velká výhoda objektového přístupu.
  • Zapouzdření – zaručuje, že objekt nemůže přímo přistupovat k „vnitřnostem“ jiných objektů, což by mohlo vést k nekonzistenci. Každý objekt navenek zpřístupňuje rozhraní, pomocí kterého (a nijak jinak) se s objektem pracuje.
  • Skládání – Objekt může využívat služeb jiných objektů tak, že je požádá o provedení operace.
  • Dědičnost – objekty jsou organizovány stromovým způsobem, kdy objekty nějakého druhu mohou dědit z jiného druhu objektů, čímž přebírají jejich schopnosti, ke kterým pouze přidávají svoje vlastní rozšíření. Tato myšlenka se obvykle implementuje pomocí rozdělení objektů do tříd, přičemž každý objekt je instancí nějaké třídy. Každá třída pak může dědit od jiné třídy (v některých programovacích jazycích i z několika jiných tříd).
  • Polymorfismus – odkazovaný objekt se chová podle toho, jaký je jeho skutečný typ. Pokud několik objektů poskytuje stejné rozhraní, pracuje se s nimi stejným způsobem, ale jejich konkrétní chování se liší. V praxi se tato vlastnost projevuje např. tak, že na místo, kde je očekávána instance nějaké třídy, můžeme dosadit i instanci libovolné její podtřídy (třídy, která přímo či nepřímo z této třídy dědí), která se může chovat jinak, než by se chovala instance rodičovské třídy, ovšem v rámci mantinelů, daných popisem rozhraní.

Proč je tedy nepoužívám v PHP?

Jsem zastánce jednoduchosti a rychlosti. Nepracuji na PHP kódu ve velikém teamu, proto nemám problém s prací s funkcemi a proměnými tak jak jsou v jednoduchém kódu.

Rychlost je pro mě hlavním důvodem, proč je nepoužívat. Režie vytváření instancí a mnohonásobných dědění je poměrně značná. PHP je interpretovaný jazyk používaný v drtivé většině případů pro vývoj webových stránek (ano vím, lze v něm psát i CLI, nebo GUI programy), což znamená, že každé načtení stránek vytváří objekty a po ukončení scriptu jsou tyto rušeny a uvolňovány z paměti. PHP v tomto případě nevytváří objekty, které by byly perzistentní v paměti.

Edit: Po čase používám

Nakonec jsem objektovému programování v PHP podlehl. Od PHP4 uplynula tak dlouhá doba, že nemusím řešit kompatibility a PHP7 má natolik dobře přepsané jádro, že „výkonostní penalizace“ je naprosto zanedbatelná.

Flattr this!

4 thoughts on “Proč nemám rád objektové PHP”

  1. Začínal jsem s PHP v dobách, kdy se terpve rodil a stále mám prblém se s OOP sžít. Stejně jako mě vyděsil pohled do hrnce ve kterém se vařila JAVA, tak podobné pocity mám z OOP. Podle mého názoru nasazení OOP zbytečně zvyšuje náklady při tvorbě menších aplikací a to je proti zdravému rozumu.
    Vyvrátí mi tento názor někdo? Díky.

  2. Nedá se s to vyvrátit, ale bohužel ani souhlasit. Vytvářet pokaždé menší objektovou aplikaci v php od začátku se rozhodně nevyplatí, ale když si připravíš univerzální systém, který se dá na většinu oněch aplikací jednoduše aplikovat a radikálně ti to usnadní práci? Nemá smysl to dále rozebírat, ale přesně na tomhle systému fungují všechny frameworky.

  3. Hibi: Objektové programování používám i v PHP, nevadí mi v něm psát, jen se mi nelíbí ta režie, která je spjata s vytvářením a uvolňováním objektů. Navíc je PHP je opravdu čistě implementovaný jazyk, kdyby se alespoň na pozadí přeložil do nějakého bytecode a pak se spuštěl jen tento, třeba jak to funguje v Pythonu.
    Já jsem trochu skeptický vůči tomu, jak funguje vývoj PHP, postupně zvažuji přechod na Python, nebo Javu, kterážto možnost existuje u mého oblíbeného webhostingu Klenot.cz také. Potíž je v tom, že PHP je volba víceméně z nouze, protože jsou dostupnější hostingy a zajisté víš, jak šetřiví dokáží být zákazníci.

  4. MaReK Olšavský: No asi můžu bejt rád, že ovládám pouze PHP a tyhle věci nemusím moc řešit. Ještě sem teda schopnej něco napsat v bashi 🙂

Komentáře nejsou povoleny.