Operátor instanceof
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.
Komentáře
Žádné komentáře. Můžete být první!