PHP samozřejmě obsahuje řadu funkcí, které umožňují spolupráci objektového a neobjektového kódu, respektive práci s informacemi o objektovém kódu.

První sada funkcí, které si ukážeme, zjišťují, zda daná metoda (třída, rozhraní) existuje.

Funkce class_exists() zjišťuje, zda daná třída existuje:

<?php 
  class Existujes{ 
  //Parametry 
  } 

if(class_exists(Existujes)){ 
  echo 'Existuje!'; 
} 
?>

Funkce method_exists() má dva argumenty (objekt a metodu) a zjišťuje, zda daná metoda existuje:

<?php 
  class Existujes{ 
    public function Metoda(){ 
    //definice 
    } 
  } 
$ins = new Existujes; 

if(method_exists($ins, Metoda)){ 
  echo 'Existuje!'; 
} 
?>

Poslední funkcí ověřující existenci je interface_exists() a její použití je například takové:

<?php 
  interface Rozhrani{} 

  if(interface_exists('Rozhrani')){ 
    class trida implements Rozhrani{ 
      public function __construct(){ 
        echo 'Existuje!'; 
      } 
    } 
  } 

$ins = new trida; 
//Vypíše Existuje 
?>

Další sada funkcí začíná frází get_ a vrací názvy metod, tříd, vlastností a podobně. Mezi tyto funkce patří:

get_class_methods (vrátí pole názvů metod třídy)
get_class_vars (vrátí pole defaultních vlastností třídy)
get_class (vrátí jméno třídy)
get_declared_classes (vrátí pole názvů definovaných tříd)
get_declared_interfaces (vrátí pole názvů definovaných rozhraní)
get_object_vars (vrátí asociativní pole vlastností objektu)
get_parent_class (vrátí název rodičovské třídy objektu)

Využití všech funkcí ukazuje následující příklad:

<?php 
  interface rozhrani1{} 
  interface rozhrani2{} 

  class Trida{ 
  public $vlastnost = 1; 
  public $vlastnost2 = 2; 
  public $vlastnost3 = 3; 

    public function metoda1(){ 
      echo $this->vlastnost; 
    } 
    public function metoda2(){ 
      echo $this->vlastnost2; 
    } 
  } 

  class TridaNova extends trida{ 
    public function metoda3(){ 
      echo 1; 
    } 
  } 

$ins = new Trida(); 
$ins2 = new TridaNova(); 

print_r(get_class_methods(Trida)); 
echo '
'; print_r(get_class_vars(Trida)); echo '
'; print_r(get_class($ins)); echo '
'; print_r(get_declared_classes()); echo '
'; print_r(get_declared_interfaces()); echo '
'; print_r(get_object_vars($ins2)); echo '
'; print_r(get_parent_class($ins2)); echo '
'; ?>

Poslední tři funkce jsou specifičtější, a tak si je probereme postupně.

Funkce call_user_method() umožňuje volání libovolné třídy. Funkci předáváme tři parametry – jméno metody, objektu a parametry metody.

Tato funkce patří k zastaralým, měli bychom spíše použít funkci call_user_func.

<?php 
  class Trida{ 
    public function Metoda($parametr){ 
      if($parametr == 1){ 
        echo 'Parametr je roven 1
'; }else{ echo 'Parametr není roven 1
'; } } } $ins = new Trida; $ins->Metoda(1); call_user_method('Metoda',$ins,2); ?>

Další funkce je is_a(), která vrací TRUE v případě, že objekt je ze stejné třídy nebo má stejnou třídu jako rodiče. Příklad vše objasní:

<?php 
  class Trida{ 
  //definice třídy 
  } 

$ins = new Trida; 
  if(is_a($ins, 'Trida')){ 
    echo 'Třída a instance jsou identické'; 
  } 
?>

Tato funkce patří k zastaralým, měli bychom spíše použít operátor instanceof.

Poslední funkce is_subclass_of() kontroluje, zda daná třída je rodičem podtřídy. Jednoduchý příklad:

<?php 
  class Trida{ 
  //definice třídy 
  } 
   
  class Podtrida extends Trida{ 
  //definice podtřídy 
  } 
   
if(is_subclass_of('Podtrida','Trida')){ 
  echo 1; 
} 
?>

Pozn. red.: Zdůrazňujeme, že tento text se týká PHP 5.

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

Odpovědět