~~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);
?>
<----