RSS: Vše - Programování



Operátor instanceof

21. 10. 2007, 20:42:09,Programování,

Pokud jste v PHP potřebovali zjistit třídu určitého objektu, byla po mnoho let k dispozici funkce is_a. S nástupem PHP5 se stala nežádoucí a oficiální dokumentace doporučuje používat operátor instanceof.

Tento operátor se běžně užívá ve tvaru $objekt instanceof NazevTridy. Na velmi zajímavé chování narazíme, pokud se pokusíme namísto názvu třídy použít nějaký řetězec; kupříkladu v případě, kdy je název třídy předán jako parametr funkce. Jak se tedy PHP5 chová?

//tohle nefunguje
if ($objekt instanceof "NazevTridy") echo "Cokoliv";

//tohle taky nefunguje
if ($objekt instanceof get_class($objekt)) echo "Cokoliv";

//ale tohle uz funguje
$className = get_class($objekt);
if ($objekt instanceof $className) echo "Cokoliv";

//a tohle taky!
$className = "NazevTridy";
if ($objekt instanceof $className) echo "Cokoliv";

Znamená to tedy, že zatímco přímo s řetězcem operátor instanceof nepracuje, tak s proměnnou typu string mu to jde bez problémů. A v čem je zakopaný pes? Interně PHP očekává T_STRING, ale řetězec ve tvaru "xxx" není T_STRING, ale T_CONSTANT_ENCAPSED_STRING - což není povolená hodnota.

Autor: Pavel Šindelka

« Předcházející článek - Další článek »

Komentáře


Žádné komentáře. Můžete být první!

Komentovat


Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat