~~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: $this->metoda() * volání mimo třídu: $objekt->metoda() * volání u statických: * uvnitř třídy: self::metoda(), self::$atribut * volání mimo třídu: Trida::metoda(), Trida::$atribut ----> === Příklad Instance === class Matematika { public function naDruhou($zaklad){ return $zaklad *$zaklad; } } $matematika = new Matematika(); echo($matematika->naDruhou(12)); <---- ----> === Příklad Statický === class Matematika { public static function naDruhou($zaklad){ return $zaklad *$zaklad; } } echo(Matematika::naDruhou(12)); <---- ==== Konstanty ==== const PI_CISLO = 3.14159265358979; volání: Trida::PI_CISLO //podobné jako definování jmenných konstant mimo OOP define(‘NAZEV_KONSTANTY’, ‘hodnota’); ===== 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) // 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'); ====== Třída ====== ----> Následující kód vytvoří instanci třídy člověk. pozdrav(); <---- ===== Kompexnější objekt ===== 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; } } ----> behej(10); $karel->behej(10); $karel->behej(10); ?> <----