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
-
Jak vybrat doménu: Co je dobré vědět?
2. září 2024 -
Vstupte do éry umělé inteligence: ASOME Max Studio s AMD Ryzen™ 9 7940HS
14. listopadu 2023 -
Nepodceňte UX na vašem webu: Proč na něm záleží?
10. dubna 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024