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.

Žádný příspěvek v diskuzi

Odpovědět