Magazine Internet

PHP : instanceof ou is_a ?

Publié le 09 septembre 2009 par Methylbro

Jusqu'à présent j'utilisais sans réfléchir l'opérateur instanceof. Car tous les petits tests de consommation que j'ai pu faire entre ces deux méthodes ont toujours démontré une légère antécédence de l'opérateur sur la fonction.

Si l'on réalise par exemple l'expérience suivante, on obtient un résultat moyen de 0,00113301 microsecondes d'écart entre les deux méthodes :

class stdObject {}
$Object = new stdObject();
$it = 10000;
$comp = 'stdObject';
$microtime = microtime();
for ($i=0;$i<=$it; ++$i) if ($Object instanceof $comp) continue;
echo 'instanceof : '.microtime()-$microtime."\n";
$microtime = microtime();
for ($i=0;$i<=$it; ++$i) if (is_a($Object, $comp)) continue;
echo 'is_a : '.microtime()-$microtime;

instanceof VS is_a

(Graphique réalisé à partir de la moyenne de 1 500 fois l'expérience)

En conclusion donc, lors d'une utilisation simple, l'opérateur instanceof s'avère apparemment plus rapide à l'exécution. Je soumets néanmoins ces tests a caution car je n'ai jamais su réaliser des tests de performance réellement satisfaisants.

Avant PHP5.1 il aurait été compréhensible de voir encore cohabiter les deux méthodes car de ce temps, instanceof faisait appel à __autoload() dans le cas ou la classe de comparaison n'existais pas. Or ce n'est plus le cas depuis.

Pourquoi ce retour de la fonction is_a() dans PHP5.3 ? Cela reste tout de même un peut mystérieux pour le moment.

Et vous, vous utilisez quoi ? instanceof ou is_a ?


Retour à La Une de Logo Paperblog

A propos de l’auteur


Methylbro 17 partages Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte