OOP v PHP: Přetěžování
Metody přetěžování jsou volány v případě, že zadáváte vlastnost nebo metodu, která není definována.
Mezi tyto metody patří __get(), která je volána, pokud je nedefinovaná vlastnost zpřístupněna pro čtení, metoda __set() je použita v případě, že použijete nedefinovanou vlastnost pro zápis, a metoda __call() je použita v případě, že voláte metodu, která není definována.
Podívejme se na následující příklad:
<?php class MetodaGet{ public $n; private $x = array("a" => 1, "b" => 2, "c" => 3); public function __get($jmeno){ echo "Jméno předané hodnoty $jmeno
"; if(isset($this->x[$jmeno])){ $r = $this->x[$jmeno]; echo "Hodnota je uložena v poli $r
"; }else{ echo "Hodnota neexistuje
"; } } } $ins = new MetodaGet(); $ins->n = 1; $ins->a++; $ins->z++; ?>
Příklad ukazuje volání neexistujících vlastností a a z. Jelikož vlastnosti nebyly předem nikde určeny, třída automaticky použije metodu __get() (z anglického „dostat“), která dále testuje hodnoty předané této metodě.
Použití metody __set() (z anglického „nastavit“) je velmi podobné, bude volána v případě, že nedefinované vlastnosti přiřadíte hodnotu. Vše objasní následující příklad:
<?php class PouzitiMetodySet{ public function __set($vlastnost, $hodnota){ echo "Byla volána nedefinovaná vlastnost - $vlastnost - s hodnotou - $hodnota"; } } $ins = new PouzitiMetodySet; $ins->NejakaNedefinovanaVlastnost = 'jeji hodnota'; ?>
Metoda __call() (z anglického „volat“) má naprosto stejné použití jako předchozí dvě metody, ovšem užívá se při práci s předem nedefinovanými metodami. Tedy:
<?php class PouzitiMetodyCall{ public function __call($metoda, $parametry){ echo "Byla volána nedefinovaná metoda $metoda"; if(isset($parametry[0])){ echo "Metoda obsahovala parametry $parametry[0]"; } } } $ins = new PouzitiMetodyCall; $ins->NejakaNedefinovanaMetoda('parametr'); ?>
Obecně řečeno je přetěžování speciálním mechanismem OOP, který nám umožňuje vyrovnat se s používáním libovolných proměnných a metod, aniž by byly přesně definovány.
Pozn. red.: Zdůrazňujeme, že tento text se týká PHP 5.
Mohlo by vás také zajímat
-
AI na dosah ruky: Jak je to s AI v osobních zařízeních?
22. ledna 2024 -
-
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023 -
Proč investovat do nejvýkonnějších VPS s AMD EPYC procesory
14. června 2024
Nejnovější
-
Umělá inteligence: Co je to GPT?
12. května 2025 -
VMC rapidně zvýšil open rate e-mailových kampaní ZONERu
9. května 2025 -
Nenechte se zaskočit TLS certifikáty na 47 dní
2. května 2025 -
Zrychlete svůj web s LiteSpeed a CZECHIA.COM
29. dubna 2025