interval.cz

OOP v PHP: Přetěžování

15. 02. 2006 | Jakub Mrozek | PHP | Komentáře: 0

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.


Další aktuální články na interval.cz

Tematicky související články

Dejte vědět i ostatním o článku

Diskuse (počet komentářů: 0)

Buďte prvním návštěvníkem, který přidá nový komentář.

Přidat nový komentář

Jméno a e-mail jsou nepovinné. Příspěvky obsahující odkaz jsou moderovány.

Reklama

Syndikace

hledáme nové autory | redakce interval.cz | reklama na interval.cz

© ZONER software, a.s., všechna práva vyhrazena. Hosting zajišťuje CZECHIA.COM. SSL certifikáty pro domény. Powered by WordPress.