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
<?php class Clovek { public function pozdrav() { echo('Ahoj'); } }
Následující kód vytvoří instanci třídy člověk.
<?php require_once('tridy/Clovek.php'); $karel = new Clovek(); $karel->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; } }
<?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); ?>
