Tato stránka je pouze pro čtení. Můžete si pouze prohlédnout zdrojový kód, ale ne ho měnit. Zeptejte se správce, pokud si myslíte, že něco není v pořádku. ~~NOCACHE~~ ~~REVEAL theme=dokuwiki&transition=convex&controls=1&show_progress_bar=1&build_all_lists=1&show_image_borders=0&horizontal_slide_level=2&enlarge_vertical_slide_headers=0&show_slide_details=1&open_in_new_window=1&size=1480x960~~ ====== PHP objektově ====== ===== Specifika OOP v PHP ===== ==== Zapouzdření ==== * public (dříve také pomocí var u atributů) * protected * private * Pokud se u metody neuvede, považuje se metoda za public ==== Instanční vs statické prvky ==== * atributy i metody * použití slova static (public static function nazev(){}) * volání u instančních: * uvnitř třídy: <fragment-block><code php> $this->metoda() </code> </fragment-block> * volání mimo třídu: <fragment-block><code php> $objekt->metoda()</code> </fragment-block> * volání u statických: * uvnitř třídy: <fragment-block><code php>self::metoda(), self::$atribut </code> </fragment-block> * volání mimo třídu: <fragment-block><code php>Trida::metoda(), Trida::$atribut</code> </fragment-block> ----> === Příklad Instance === <fragment-block><code php> class Matematika { public function naDruhou($zaklad){ return $zaklad *$zaklad; } } </code> </fragment-block> <fragment-block><code php> $matematika = new Matematika(); echo($matematika->naDruhou(12)); </code> </fragment-block> <---- ----> === Příklad Statický === <fragment-block><code php> class Matematika { public static function naDruhou($zaklad){ return $zaklad *$zaklad; } } </code> </fragment-block> <fragment-block><code php> echo(Matematika::naDruhou(12)); </code> </fragment-block> <---- ==== Konstanty ==== <fragment-block><code php> const PI_CISLO = 3.14159265358979; volání: Trida::PI_CISLO </code> </fragment-block> <fragment-block><code php> //podobné jako definování jmenných konstant mimo OOP define(‘NAZEV_KONSTANTY’, ‘hodnota’); </code> </fragment-block> ===== Automatické načítání tříd ===== normálně musíme každý skript s třídou načíst před použitím dané třídy (např. require_once) <fragment-block> <code php> // načte automaticky soubor s danou třídou ve složce classes function my_autoloader($class) { require_once 'classes/' . $class . '.class.php'; } // registruje funkci jako pro potřeby automatického načítání spl_autoload_register('my_autoloader'); </code> </fragment-block> ====== Třída ====== <fragment-block><code php> <?php class Clovek { public function pozdrav() { echo('Ahoj'); } } </code> </fragment-block> ----> Následující kód vytvoří instanci třídy člověk. <fragment-block><code php> <?php require_once('tridy/Clovek.php'); $karel = new Clovek(); $karel->pozdrav(); </code> </fragment-block> <---- ===== Kompexnější objekt ===== <fragment-block><code php> class Clovek { public $jmeno; public $prijmeni; public $vek; private $unava = 0; public function clovek($jmeno, $prijmeni, $vek) { $this->jmeno = $jmeno; $this->prijmeni = $prijmeni; $this->vek = $vek; } public function spi($doba) { $this->unava -= $doba * 10; if ($this->unava < 0) $this->unava = 0; } public function behej($vzdalenost) { if ($this->unava + $vzdalenost <= 20) $this->unava += $vzdalenost; else echo('Jsem příliš unavený.'); } public function pozdrav() { echo('Ahoj, já jsem ' . $this->jmeno); } public function __toString() { return $this->jmeno; } } </code> </fragment-block> ----> <fragment-block><code php> <?php require_once('tridy/Clovek.php'); $karel = new Clovek('Karel', 'Novák', 30); $jan = new Clovek('Jan', 'Nový', 24); $karel->behej(10); $karel->behej(10); $karel->behej(10); ?> </code> </fragment-block> <---- spse/pm3/php/objekty.txt Poslední úprava: 2024/07/07 16:48autor: 127.0.0.1