Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Nette\Object - taťka všech objektů

Je známo, že objekty se do jazyka PHP dostaly spíš jako nezvaní hosté. Docela příznačným rozdílem mezi jazykem, který byl jako objektový již navrhován, a jazykem, který se jím stal k velkému překvapení samotných tvůrců, je v absenci resp. přítomnosti společného předka všech tříd. Object Pascal deklaruje TObject, DOT.NET má System.Object a v Javě nebo Ruby stojí v hierarchii nejvýše Object (je delikátní, že nejzákladnější třída bývá pojmenována objekt). V PHP nic takového neexistuje.

Základní třída obvykle deklaruje metody pro sebereflexi. Například metodu vracející název třídy. Je to sice detail, ale vždycky mi připadalo tuze ošklivé mixovat hezký objektový kód s voláním pro-objektové funkce get_class:

$a = $obj->myMethod();
$class = $obj->getClass(); // hezké
$class = get_class($obj); // ošklivé

…pokračování continue

clock 1. 12. 2007 pencil Nette comments Komentáře: 40


Kdy bude Nette aneb

Titulky obsahující slovo „aneb“ mi vždycky připadaly divné. A tento je ze všech úplně nejdivnější. Že jo?

Téměř každý den dostávám dotaz, kdy bude Nette. Už jsem si říkal, že si připravím automatickou odpověď, nebo si napíšu do messengera plugin, který to za mě bude vyřizovat sám. Ale nakonec jsem šáhl po blogu. Takže, slyšte…

Rozpaky programátora Svatopluka

Je krásný vlahý den, tři hodiny ráno, a vy si zlehka programujete novou báječnou webovou aplikaci. Důležitou roli v ní hraje vaše šikovná knihovna Manipulator. Když tu si najednou všimnete, že volání metody $manipulator->appendFor(TRUE, $objA) má jednu kosmetickou vadu. Teda vlastně dvě. Jednak samotný název metody je nešťastný, vhodnější by bylo appendTo nebo pouhé append. A za druhé – to pořadí argumentů by mělo být opačné. No jistě, kolikrát už jste se sám spletl. Je to jasné, $manipulator->append($objA, TRUE) vypadá mnohem lépe. Navíc druhý parametr bývá v 99 % případů TRUE, takže ho můžeme dát jako volitelný, s touto výchozí hodnotou.

Motivace na drobný refactoring jako vyšitá.

Co zatím nevíte…

Něco vám musím prozradit. Knihovna Manipulator je velmi populárním open-source projektem. Používají ho tisíce vývojářů. A vy jste jeho autorem.

Jo, kdybyste byl samotář, co si kód píše a používá sám, přejmenování metody a prohození parametrů by byla brnkačka. No, uvažujete, na to by se dal napsat regulární výraz. Prográmkem (samozřejmě opět vlastní výroby) Search & Replace si projedete všechny své zdrojáky a jednotlivé záměny budete ručně potvrzovat. To pro sichr.

Odhadem – bajvoko – za čtvrt hodinky je to hotové.

Ale jak jsem zmínil, Manipulator je big fasa project. Takže přemýšlíte, jestli vážně tu změnu udělat:

Neváhal bych, jenže co ty tisíce uživatelů? Způsobím jim komplikace, práci navíc. A přitom jde vlastně o hloupost.

Jenže, mně se prostě appendFor nelíbí, mně to tam vadí. Chci to změnit. Manipulator používá stále víc programátorů a čím později změnu udělám, tím víc jich to postihne.

Nebo raději počkám na větší update, až se změní velké číslo verze.

Ale kurnik žádné závazky přece nemám, prostě to změním a hotovo. Napíšu to do changelogu, programátoři si to přečtou a svůj kód si holt budou muset změnit.

Ach jo, víš, jak to dopadne, budeš odpovídat na tisíce dotazů „hele, updatnul jsem si Manipulator a píše mi Fatal error: Call to undefined method appendFor, co stím?“

Doprkýnka, pošlu je do patřičných míst v changelogu.

Ale nepošleš. Jen si vzpomeň, kolikrát jsi sám aktualizoval software a nikdy jsi nestudoval changelog. Sám to neděláš a po ostatních to chceš?

Dobře, ale co já z těch „ostatních“ mám? Dávám jim svůj těžce vydřený software zdarma – a co je zdarma, to nikdo neocení. Píšu dokumentaci, odpovídám na stovky dotazů a výsledek je, že se nervuju, když chci přejmenovat jednu blbou funkci.

Nebo vznesu návrh, uvidíme, co na to řeknou uživatelé.

No co asi. Zrovna minulý týden jsi přejmenoval dvě klíčové třídy. To bude zase radosti… Vykašli se na to.

Stop!

A tady příběh zastavíme. Jako na videu. Od této chvíle je to na vás! Jak se má programátor Svatopluk Kuřátko rozhodnout?

  1. změnit název metody a prohodit pořadí parametrů
  2. na úpravu se vykašlat

Posílejte SMS ve tvaru HLA DGX A nebo B. Jste to vy, kdo ovlivní další děj!

Málem bych zapomněl. Vy vlastně chcete vědět, kdy bude Nette, že? Já se tak rozepsal, že mi to skoro vypadlo. Uff, to bylo o fous.

clock 25. 4. 2007 pencil Nette comments Komentáře: 54


Nette\Utils\Html - pomocník PHP kodéra

Malá knihovna pro generování (X)HTML kódu v PHP.

→ Download: Nette\Utils\Html­.zip (revize 101) licence, překlad

Upozornění: Knihovna Nette\Utils\Html se neustále vyvíjí. Aktuální informace najdete na webu Nette Framework. Popis v tomto článku postupně aktualizuji, takže některé komentáře pod ním mohou být již nesouvisející.

Způsobů, jak v PHP vygenerovat kód stránky, je celá řada. Od obyčejného volání příkazu echo, přes použití šablon, až po funkce DOM. Hledání nejlepší metody vede k paradoxu. Čím je programátor zkušenější, tím více tíhne k čistějším řešením, ideálně na bázi XML DOM. Tím však začne narážet na nové překážky a omezení a více času tráví jejich řešením a obcházením. Díky čemuž více tíhne k pragmatickým řešením, jako je třeba volání echo.

Ale posuzování vhodnosti jednotlivých způsobů není předmětem článku.

Seznamte se s Nette\Utils\Html (dříve NHtml)

Generování HTML značek „na koleně“ vede k nepřehlednému kódu a tím i k větší náchylnosti k chybám. Vezměme si jednoduchý příklad:

…pokračování continue

clock 20. 12. 2006 pencil Nette comments Komentáře: 87


Vkládání souborů v Nette

Programový kód zpřehledníme rozdělením do více souborů. V případě OOP se nabízí ukládání každé třídy/interface (resp. několika úzce souvisejících tříd) do samostatného souboru. Tyto soubory je vhodné pojmenovávat podle nějaké své konvence. Následně je vkládáme do skriptů konstrukcí require_once. Opět, kvůli přehlednosti, bývá zvykem všechna vkládání umísťovat na začátky skriptů.

Odbočka: pokud použijete relativní cestu k souboru, require_once jej dohledá možná trošku nečekaným způsobem. Na include_path se také nerad spoléhám, proto se kloním k používání absolutních cest tímto způsobem:

require_once dirname(__FILE__).'/soubor.php';

Slabá místa

Tohle všechno sice přispívá ke zpřehlednění kódu, ale má to i slabé stránky:

  • vkládáme soubory, které třeba nebudeme potřebovat
  • ke každé třídě si musíme pamatovat název souboru

Obzvláště ta dualita třída ↔ soubor mi hodně vadí. Hledal jsem tedy nějaké flexibilní řešení, které by jednak odstranilo obě slabá místa, zároveň co nejvíce zjednodušilo programátorovi život a hlavně nekladlo nová omezení či pravidla.

…pokračování continue

clock 22. 3. 2006 pencil Nette comments Komentáře: 32


Nette a propojení stránky s kódem

Minule jsem ukazoval, jak lze s Nette stavět statické stránky. Ne náhodou jsem začal právě tímto tématem. Statické stránky a technika „dědění“ jsou totiž základním pilířem budování webového sídla. Je na webovém architektovi, aby připravil návrh website, grafik společně s HTML kodérem mohou pilovat vizuální podobu stránek a programátor je oživuje. Nette plně podporuje tuto pokrokovou filozofii skupinového vývoje.

Troška terminologie nikoho nezabije

Začínáme se věnovat oživování stránek, opusťme tedy pojem „statické stránky“. Jen by nás mátl.

Nette podporuje stránky zapsané nejen v jazyce XHTML, ale i HTML a XML (např. RSS kanály). Místo neobratného „HTML-XHTML-XML stránky“ budu dále používat termín dokumenty.

Upozornění: Článek se týká velmi staré verze Nette Framework, současná syntaxe je jiná.

Dokument je tvořen stromem elementů. Program může s touto hierarchií dále pracovat prostřednictvím tzv. DOM.

Základní jednotkou oživování dokumentů je komponenta. Jde o třídu (resp. objekt, podle kontextu), která je potomkem Component. Speciálním druhem komponenty je stránka (třída Presenter). Komponenty tvoří stromovou strukturu a jejím kořenem je vždy nějaký následník třídy Presenter. Tuto strukturu budu označovat jako COM. Nemá to nic společného s technologií COM od Microsoftu.

…pokračování continue

clock 17. 3. 2006 pencil Nette comments Komentáře: 41


phpFashion © 2004, 2012 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.