Magazine Internet

PHP 5.3 : Résolution statique à la volée - Late Static Bindings

Publié le 18 octobre 2009 par Methylbro

Le principe du Late Static Bindings est simple : lors de l'appel statique d'une propriété sur un objet (qu'il s'agisse d'un attribut ou d'une méthode) le moteur ne résoudra pas les noms en se basant sur ce qui à été défini par vos classe, mais avec les informations une fois compilés.

PHP : Résolution statique à la volée - Late Static Bindings

Prenons un exemple :

class Foo {
static function name() {
return 'Foo';
}
static function who() {
echo self::name();
}
}
class Bar extends Foo {
static function name() {
return 'Bar';
}
}
Bar::name();

Cet exemple affichera « Foo » en sortie. Pourtant, comme l'on effectue l'appel de la méthode who() directement depuis la classe Bar, il serait intéressant que la méthode who() prenne en compte le polymorphisme due à l'héritage et utilise le résultat de Bar::name() au lieu de Foo::name().

C'est là ou l'arrivée du Late Static Bindings est intéressante. En remplaçant le mot clé self par static nous allons dire à PHP de résoudre les éléments à la l'exécution et non pas telle qu'elles ont été définies à la compilation.

class Foo {
static function name() {
return 'Foo';
}
static function who() {
echo static::name();
}
}
class Bar extends Foo {
static function name() {
return 'Bar';
}
}
Bar::name();

Résultat notre appel de Bar::name() affichera désormais en sortie « Bar » et plus « Foo ».

Maintenant, la résolution des éléments étant faite à l'exécution, il est probable (je ne l'ai pas testé) qu'utiliser la Compilation Statique Tardive soit un peu consommatrice en temps CPU. Si vous avez des retours d'expérience à ce sujet, je suis preneur.


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