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.
Mohlo by vás také zajímat
-
AI v programování: Jak používat GitHub Copilot (část 1)
12. února 2024 -
Thunderbolt 4 vs. OCuLink: Přišel čas na upgrade?
27. května 2024 -
Globální výpadek IT systémů: Může za to jediná aktualizace
19. července 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