<?xml version="1.0" encoding="UTF-8" standalone="no"?><map version="0.8.1"><node CREATED="1244379737140" ID="1j2pt4bvtj0is8slvrj0ju0s1e" MOIFIED="1244379737140" TEXT="Objektově orientované programování (OOP) v PHP"><node CREATED="1244379737140" ID="1dj5ktphlppmpgghmrji00f0k0" MOIFIED="1244379737140" POSITION="right" TEXT="Co přináší OOP"><node CREATED="1244379737141" ID="3ebrjmvkj6m9ljk24t0ornkv0t" MOIFIED="1244379737141" TEXT="Zapouzdření"><node CREATED="1244379737141" ID="4v9v5e3im8bg4gb1k3bqc0r7ja" MOIFIED="1244379737141" TEXT="Uživatel se odstíní od vnitřního fungování prostřednictvím rozhraní."/></node><node CREATED="1244379737141" ID="12ce8tfm44m2ebq69qbm1f6bf7" MOIFIED="1244379737141" TEXT="Dědění"/><node CREATED="1244379737141" ID="16clqj2pukrgr7fs509r80nqun" MOIFIED="1244379737141" TEXT="Polymorfismus"><node CREATED="1244379737141" ID="2ubf8end3glptsdafki5vquvcn" MOIFIED="1244379737141" TEXT="Schopnost OOP přeměnit chování nejaké třídy v závislosti na kontextu."/></node></node><node CREATED="1244379737141" ID="78l0add5vf1j4ma3feh8om9cha" MOIFIED="1244379737141" POSITION="right" TEXT="Pojmy"><node CREATED="1244379737141" ID="3nl86g2t6k3eufem6bmcnq08bm" MOIFIED="1244379737141" TEXT="Třídy"><node CREATED="1244379737142" ID="3usrevb8701rj1l97rke6opqkj" MOIFIED="1244379737142" TEXT="class nazev { }"/></node><node CREATED="1244379737142" ID="626p2n5l2t24egk2jlunksevco" MOIFIED="1244379737142" TEXT="Objekty"><node CREATED="1244379737142" ID="2mem2f66j7u0qthq51c27fhpjb" MOIFIED="1244379737142" TEXT="Instance tříd, $objekt = new Trida();"/></node><node CREATED="1244379737142" ID="04jkd1ipbhrah4mnjjvhq3ovme" MOIFIED="1244379737142" TEXT="Členské proměnné"><node CREATED="1244379737142" ID="6ic4nqotle7od449knce4pg6lr" MOIFIED="1244379737142" TEXT="např. class Trida { private $atribut; }"/><node CREATED="1244379737142" ID="262v95bmgancsu04pic5u4i4r1" MOIFIED="1244379737142" TEXT="Atributy popisující charakteristiky třídy."/><node CREATED="1244379737142" ID="7r88nknauscg0va17f0jivid9b" MOIFIED="1244379737142" TEXT="Odkazy: $objekt-&gt;atribut (uvnitř třídy $this-&gt;atribut)"/></node><node CREATED="1244379737142" ID="5gdffi4l4fismdlfi3hoasrt40" MOIFIED="1244379737142" TEXT="Obor členských proměnných"><node CREATED="1244379737142" ID="26j46pn9ibi4mq1a2raeoac9k6" MOIFIED="1244379737142" TEXT="public - lze k nim přistupovat přímo (např. $objekt-&gt;atribut = &quot;neco&quot;;), nemělo by se používat"/><node CREATED="1244379737142" ID="7e8tntrl88c7qt00qeccvn25ik" MOIFIED="1244379737143" TEXT="private - dostupné pouze uvnitř třídy, ve které jsou definované, ani v instanci a ani v podtřídách, musí se k nim přistupovat přes veřejné rozhraní"/><node CREATED="1244379737143" ID="4r6ljplves6l2c7ihbrpru3q6h" MOIFIED="1244379737143" TEXT="protected - určeny pouze pro interní potřebu třídy, dostupné pouze uvnitř tříd a v podtřídách"/><node CREATED="1244379737143" ID="57fqu99qbkh7a8hgeuatknjluv" MOIFIED="1244379737143" TEXT="final - není možné ji překrýt v odvozené třídě"/></node><node BACKGROUND_COLOR="#FFFF00" CREATED="1244379737143" ID="5eke6ncekabuuojk2c7su555m4" MOIFIED="1244379737143" TEXT="Vlastnosti"><node CREATED="1244379737143" ID="0dmsesrluv4n9a83dot6kv2bk1" MOIFIED="1244379737143" TEXT="bohužel PHP 5 nenabízí &quot;plně&quot; vyhovující funkcionalitu, ale má něco co připomíná podporu vlastností"/><node CREATED="1244379737143" ID="0dgmjsrcrof4esun3sgcb7ug7j" MOIFIED="1244379737143" TEXT="jde o přetěžování metod __set a __get (deklarujíc se jako metoda v třídě), které se volají, když se pokusíme odkázat na neexistující členskou proměnnou"/><node CREATED="1244379737144" ID="1ecok1lo286nbut5gdmq6q28u8" MOIFIED="1244379737144" TEXT="využívají se k výpisu chybové zprávy nebo dokonce k rozšíření třídy za pochodu vytvářením nových proměnných"/><node CREATED="1244379737144" ID="4jkle7q5d3c6fu1evlb1bsiq1k" MOIFIED="1244379737144" TEXT="__set(promenna, hodnota)"><node CREATED="1244379737144" ID="22h041lkulalcamllipped0e1d" MOIFIED="1244379737144" TEXT="mutátor (setter), skrývá implementaci a ověřuje data dříve, než se přiřadí"/><node CREATED="1244379737144" ID="38j1l2h9j4b2qbik6h6sjqbhnr" MOIFIED="1244379737144" TEXT="může rozšířit třídu o nové vlastnosti"/></node><node CREATED="1244379737144" ID="7l6vpjca835osn9fant00ob7qk" MOIFIED="1244379737144" TEXT="__get(promenna)"><node CREATED="1244379737144" ID="52u3n1nepu65iubkpsvv59t05e" MOIFIED="1244379737144" TEXT="accessor (getter), když chceme získat hodnotu proměnné z třídy"/></node><node CREATED="1244379737144" ID="04clmn8k04vivtlhadr56gjjg5" MOIFIED="1244379737144" TEXT="nejsou však postačující pro složitější objektové aplikace, v tom případě je na místě vytvořit pro každou privátní členskou proměnnou dvě veřejné metody napr. getJmeno(), setJmeno()"/></node><node CREATED="1244379737144" ID="5ntpr41dfu09mu45pbtqi44ogk" MOIFIED="1244379737144" TEXT="Konstanty"><node CREATED="1244379737144" ID="2g2sm0k4thcm8b3cs5fi7f2sjn" MOIFIED="1244379737144" TEXT="definují se uvnitř třídy, nezmění se po celou dobu života objektu vytvořeného z dané třídy (např. dobré pro PI)"/><node CREATED="1244379737144" ID="6ie269rpqbl5eqj9v1gj0g8plm" MOIFIED="1244379737145" TEXT="const NAZEV = 'neco';"/><node CREATED="1244379737145" ID="0shqt92tt0opnojg7cirpt9i5b" MOIFIED="1244379737145" TEXT="volá se echo trida::KONSTANTA;"/></node><node CREATED="1244379737145" ID="6m1rphqocppbvqaa9n93nsdn12" MOIFIED="1244379737145" TEXT="Metody"><node CREATED="1244379737145" ID="5qm3kldhakja0d0mrcjhdfakri" MOIFIED="1244379737145" TEXT="Obdobné jako funkce, definují chování v nějaké konkrétní třídě."/><node CREATED="1244379737145" ID="1dns88gjkugieqjjo0hhp1ie1i" MOIFIED="1244379737145" TEXT="volají se $objekt-&gt;metoda();"/><node CREATED="1244379737145" ID="0daoglt9jku93fk1phkalsu1vh" MOIFIED="1244379737145" TEXT="deklarace - obor function nazev() { ... }"/><node CREATED="1244379737145" ID="5dhife0aviinjm0nnschth32tc" MOIFIED="1244379737145" TEXT="pokud se neuvede obor, implicitně se bere public"/></node><node CREATED="1244379737145" ID="0tpkov3okcqbvj2tndmppfh51d" MOIFIED="1244379737145" TEXT="Obory metod"><node CREATED="1244379737145" ID="5erffa1b71ai8piu9see61tdmq" MOIFIED="1244379737145" TEXT="public - jsou přístupné odkudkoliv"/><node CREATED="1244379737145" ID="5kabpcrdjufuogd1flnr52uh42" MOIFIED="1244379737145" TEXT="private - pouze pro interní potřebu původní třídy, nemohou je volat instance objektů ani původní, ani odvozených tříd, všechny metody určené jako pomůcky pro jiné metody mají být private"/><node CREATED="1244379737146" ID="4dipqo4dj1mlcsbp4fjvv80k35" MOIFIED="1244379737146" TEXT="protected - dostupné pouze v původní třídě a v jejich podtřídách, mají sloužit jako pomůcky při interních výpočtech v původní třídě nebo v jejich podtřídách"/><node CREATED="1244379737146" ID="72gkfgskoqs8juq209tvjbus7c" MOIFIED="1244379737146" TEXT="abstract"><node CREATED="1244379737146" ID="1cd9kvgp6f59pnmkr0f5uh1mlh" MOIFIED="1244379737146" TEXT="deklarují se jen v rodičovské třídě, ale implementují v dceřiných"/><node CREATED="1244379737146" ID="3qtjhomnc9ma7rs93v1m62n02j" MOIFIED="1244379737146" TEXT="abstraktní metody mohou obsahovat pouze abstraktní třídy, používá se pro inavrhování API, které se později použije jako implementační model"/><node CREATED="1244379737146" ID="3g29gcn1c71uufbibaaq355ro0" MOIFIED="1244379737146" TEXT="abstract function nazev();, z dané abstraktní třídy se pak odvozují konkrétnější třídy"/></node><node CREATED="1244379737146" ID="4igsu4gr49mp93ccik1uaipc9s" MOIFIED="1244379737146" TEXT="final - zabrání tomu, aby se mohla metoda překrývat v podtřídách"/></node></node><node CREATED="1244379737146" ID="07f2lgp3jmjgb78ems2hng4n6h" MOIFIED="1244379737146" POSITION="right" TEXT="Type hinting (rada pro typ)"><node CREATED="1244379737146" ID="4farfu2nqhn68l19anpdg205pi" MOIFIED="1244379737146" TEXT="zajišťuje, že objekt, který se předává do metody, bude opravdu členem správné třídy"/><node CREATED="1244379737147" ID="7mmbl7rgp57mjnpvgro2dh0vjm" MOIFIED="1244379737147" TEXT="private function nazev(trida $objekt);"/><node CREATED="1244379737147" ID="688l89tecfmcl5jqgtir9kcbq7" MOIFIED="1244379737147" TEXT="funguje pouze pro objekty"/></node><node BACKGROUND_COLOR="#FFFF00" CREATED="1244379737147" ID="24oq81j04f9oibf3oabknsrajl" MOIFIED="1244379737147" POSITION="right" TEXT="Konstruktory"><node CREATED="1244379737147" ID="33n5502ia63su7fa797scb4tk1" MOIFIED="1244379737147" TEXT="Kód, který se vykonává automaticky v době, kdy se vytváří instance objektu."/><node CREATED="1244379737147" ID="0olnci8baaq40n2u1tb9afver0" MOIFIED="1244379737147" TEXT="Může přijímat parametry, které se v době vytváření instance přiřadí konkrétním členským proměnným objektu."/><node CREATED="1244379737147" ID="6ocebq0oe56879fjng4p9otkul" MOIFIED="1244379737147" TEXT="Může volat metody třídy a jiné fce."/><node CREATED="1244379737147" ID="2smg2mf9uko94lkt613r4krmva" MOIFIED="1244379737147" TEXT="Může volat jiné konstruktory včetně konstruktorů z rodičovské třídy."/><node CREATED="1244379737147" ID="544587g1up4ackpbunblucpoac" MOIFIED="1244379737147" TEXT="function __construct (...) { }"/><node CREATED="1244379737147" ID="1vds0adflgroa0de91c1f1rfva" MOIFIED="1244379737147" TEXT="PHP automaticky nevolá konstruktor rodičovské třídy, dělá se to explicitně pomocí parent::__construct() c konstruktoru odvozené třídy."/><node CREATED="1244379737148" ID="69mmoqotobpd04mk8k1jf6h3rt" MOIFIED="1244379737148" TEXT="Můžeme volat i nespřízněný konstruktor pomocí trida::_construct();"/></node><node CREATED="1244379737148" ID="5lnd0k1e2df1fmrjmvn5tbud0r" MOIFIED="1244379737148" POSITION="right" TEXT="Destruktory"><node CREATED="1244379737148" ID="2ciqs8h7ln5ehuujprlic032or" MOIFIED="1244379737148" TEXT="function __destruct();"/><node CREATED="1244379737148" ID="7lqodenje2msr6ntutdmbf0kfo" MOIFIED="1244379737148" TEXT="Když skript skončí, PHP zničí všechny objekty sídlící v paměti. Takže v tomto případě explicitní deklarování konstruktoru zbytečné."/><node CREATED="1244379737148" ID="5mp3dc38fbkuobciuookfrqvi3" MOIFIED="1244379737148" TEXT="Využijeme, když chceme například se zánikem objektu vymazat nějaká data z databáze nebo ze souboru apod."/></node><node CREATED="1244379737148" ID="4kppo02l0r5lsc3qlj2at80kdk" MOIFIED="1244379737148" POSITION="left" TEXT="Statické členy tříd"><node CREATED="1244379737148" ID="046qlodr78ju8h56bnm4cj043t" MOIFIED="1244379737148" TEXT="Členské proměnné a metody, které nebude volat žádný konkrétní objekt, ale budou patřit do všech instancí a všechny instance je budou sdílet."/><node CREATED="1244379737148" ID="7nk6fn9h52lpm5gqd9b42nfq0h" MOIFIED="1244379737149" TEXT="Dobré např. když děláme třídu pro počítání návstěvníků stránky a počítáme jejich počet a nechceme, aby se tento počet vrátil na nulu pokaždé, když se vytvoří instance třídy."/><node CREATED="1244379737149" ID="0kd65dbbfuq58mfil4nhbq3skb" MOIFIED="1244379737149" TEXT="private static $Nazev_tridy = neco;"/><node CREATED="1244379737149" ID="7lo7aqnbgojtm69ejdldnuc8l3" MOIFIED="1244379737149" TEXT="Na statické členské proměnné a metody se odkazuje klíčovým slovem self a názvem třídy."/><node CREATED="1244379737149" ID="3js9vhvsuq16lqogac7h2985b4" MOIFIED="1244379737149" TEXT="self::$Nazev;"/></node><node CREATED="1244379737149" ID="169smm61bha5vv8dva2uu5e2lq" MOIFIED="1244379737149" POSITION="left" TEXT="instanceof"><node CREATED="1244379737149" ID="1b3u9boepqchsb1dt588ujdmqi" MOIFIED="1244379737149" TEXT="Zjišťuje, zda je nějaký objekt intancí dané třídy, podtřídou třídy nebo implemeentuje-li konkrétní rozhraní."/><node CREATED="1244379737149" ID="17712uas7fdc7rjooccm1gos8q" MOIFIED="1244379737149" TEXT="if ($osoba instanceof Clovek) echo &quot;OK&quot;;"/><node CREATED="1244379737149" ID="4coqu0htff15rijostnqpqc001" MOIFIED="1244379737149" TEXT="Jestliže se porovnání nezdaří, vykonávání skriptu skončí."/><node CREATED="1244379737149" ID="0rephplif9qpi8idpgpaocau20" MOIFIED="1244379737149" TEXT="Vhodné, pokud voláme opakovaně nějakou konkrétní fci ale chceme její chování došít na míru podle typu objektu."/></node><node CREATED="1244379737149" ID="595ql7u1qh73jitk8qpamqaem3" MOIFIED="1244379737150" POSITION="left" TEXT="Pomocné funkce"><node CREATED="1244379737150" ID="15b7pfr7qqq51tv1bs6k2dleqt" MOIFIED="1244379737150" TEXT="class_exists(trida);"/><node CREATED="1244379737150" ID="6ou1k2ui3evhmbnja2fp2p4i87" MOIFIED="1244379737150" TEXT="get_class(objekt);"><node CREATED="1244379737150" ID="7fsila9da32nh5jqn45a89o4i1" MOIFIED="1244379737150" TEXT="vrátí název třídy do které patří objekt"/></node><node CREATED="1244379737150" ID="1mhq7ju1gv5d331n47ekjri7gn" MOIFIED="1244379737150" TEXT="get_class_methods(trida);"><node CREATED="1244379737150" ID="167nv3b0f06nb3jil1rov16bp2" MOIFIED="1244379737150" TEXT="vrátí pole obsahující názvy všech metod"/></node><node CREATED="1244379737150" ID="114i0cd0erbt9d5frpj4av7r24" MOIFIED="1244379737150" TEXT="get_class_vars(trida);"><node CREATED="1244379737150" ID="7r4683nbl8k50ebp2aot4fr23n" MOIFIED="1244379737150" TEXT="vrátí asociativní pole názvů všech členských proměnných"/></node><node CREATED="1244379737150" ID="5s62vekrb71hskj550r1ip6fik" MOIFIED="1244379737150" TEXT="get_declared_classes();"><node CREATED="1244379737151" ID="3ecu45kt2cseo23tn1sq0qcqkt" MOIFIED="1244379737151" TEXT="vrátí pole obsahující názvy všech tříd definovaných uvnitř aktuálně vykonávaného skriptu"/></node><node CREATED="1244379737151" ID="33ikk7hch44t5kjepi75j800vq" MOIFIED="1244379737151" TEXT="get_object_vars(object);"><node CREATED="1244379737151" ID="2no35vtc1d1ob4msnijt9gpm71" MOIFIED="1244379737151" TEXT="vrátí asociativní pole členských proměnných a jejich hodnot, které jsou dostupné pro objekt, ty které nemají přidělenou žádnou hodnotu, v poli bude NULL"/></node><node CREATED="1244379737151" ID="3034a8d6mrvfr7bficgcq1k9nf" MOIFIED="1244379737151" TEXT="get_parent_class(objekt);"><node CREATED="1244379737151" ID="0aiqljadtll0m9cesn0cj9m602" MOIFIED="1244379737151" TEXT="vrátí název rodičovské třídy té třídy, kam objekt patří, je-li objekt řetězec, předpokládá se, že je to název třídy a vrátí se název rodičovské třídy této třídy"/></node><node CREATED="1244379737151" ID="1pa4503hu9ua10dr4du04fep4u" MOIFIED="1244379737151" TEXT="is_a(objekt, trida);"><node CREATED="1244379737151" ID="3stta3q7ppncnmbubhc3ga1ib4" MOIFIED="1244379737151" TEXT="vrátí TRUE jestliže objekt patří do třídy nebo do nějaké třídy, která je z ní odvozená"/></node><node CREATED="1244379737151" ID="5bh6iv364dm13rncague1c5a6n" MOIFIED="1244379737151" TEXT="is_subclass_of(objekt, trida);"><node CREATED="1244379737151" ID="43l2n6696a1ohvekr1k4l4741a" MOIFIED="1244379737152" TEXT="vrátí TRUE jestliže je objekt patří do třídy odvozené z třídy"/></node><node CREATED="1244379737152" ID="4ekt9b5gbqn6fvqhjbbv73hi71" MOIFIED="1244379737152" TEXT="method_exists(objekt, metoda);"><node CREATED="1244379737152" ID="0jah5k1dti1dt42dcsfje6pmt5" MOIFIED="1244379737152" TEXT="vrátí TRUE jestliže je metoda dostupná objektu"/></node></node><node BACKGROUND_COLOR="#FFFF00" CREATED="1244379737152" ID="5evstm8jate3rc3tmtlp43fn0f" MOIFIED="1244379737152" POSITION="left" TEXT="Automatické načítání objektů"><node CREATED="1244379737152" ID="2aeptnpsfbme911uh4q95ma9cu" MOIFIED="1244379737152" TEXT="funkcí __autoload() se zbavíme nutnosti vkládat příkazy require_once() apod."/><node CREATED="1244379737152" ID="1f10flc6v5vqpcea5739oc9eu2" MOIFIED="1244379737152" TEXT="když se nějaké třída zavolá poprvé, zavolá se __autoload() a načte třídu podle příkazů v této fci"/><node CREATED="1244379737152" ID="23b73dgj29cqo68auvii207796" MOIFIED="1244379737152" TEXT="umístit ji do nějakého globálního konfiguračního souboru"/><node CREATED="1244379737152" ID="3js15141qta88kb2ql5kmdfj8k" MOIFIED="1244379737152" TEXT="function __autoload($trida) { require_once(&quot;tridy/$trida.class.php&quot;); }"/></node></node></map>
