OOP v PHP: Funkce pro spolupráci s OOP
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.







