J'ai besoin de Bea pour pouvoir utiliser une variable statique définie dans une classe qui étend une classe de base ... de la classe de base.
Considérez ceci: P>
class Animal {
public static $color = 'black';
public static function get_color()
{
return self::$color;
}
}
class Dog extends Animal {
public static $color = 'brown';
}
echo Animal::get_color(); // prints 'black'
echo Dog::get_color(); // also prints 'black'
3 Réponses :
Malheureusement, avant PHP 5.3, il n'y a aucun moyen de simuler une reliure statique tardive. La seule façon dont vous pouvez obtenir l'héritage de fonctionner au fur et à mesure de votre intention, c'est si ce sont des variables et des méthodes d'instance. P>
Ce qui signifie que je ne peux pas utiliser des méthodes statiques pour créer eux-mêmes les objets eux-mêmes?
Non si vous comptez sur des données statiques stockées dans des sous-classes, non.
J'ai rencontré ce problème lors de la sous-classement quelque chose dans le cadre Zend. Ma détermination était que dans des terres purement statiques, vous n'avez qu'une seule option ... redéfinir la fonction dans la classe héritante: si vous pouvez créer des instances - vous pouvez utiliser La seule autre option que j'ai pensé à utiliser un paramètre de fonction à la fonction statique Pour définir une classe, elle était appelée. Il peut être par défaut à get_class ($ this) code> Pour savoir la classe d'appel, par exemple: p> __ classe __ code> et ensuite vous pouvez retour parent :: get_class ($ classe) code> de la sous-classe. Un modèle comme celui-ci pourrait être utilisé pour faciliter la réutilisation de la fonction statique (car je doute que le retour d'une propriété publicitaire statique est la seule chose que vous essayez d'utiliser auto :: code> pour dans cette méthode statique: p>
Merci pour votre réponse. Cela fonctionne dans l'exemple que j'ai fourni, mais le cas réel est un peu plus compliqué. Je modifie mon message pour vous dire ce que je veux réellement faire et, espérons-le, il pourrait y avoir des angles très différents que ceux que j'ai essayés.
dans PHP 5.3+, ce qui suit serait préféré:
Je suppose que
chien code> devrait prolongeranimal code>?Avec l'explication ultérieure, je pense que vous devriez mettre votre recherche / trouver par des fonctions comme méthodes sur une classe de table plutôt que sur la statique sur une classe de lignes (ce que cela ressemble à être comme vous essayez
GNARF: Oui, c'est ce que je suis venu avec la fin de la nuit dernière. Ce n'est pas aussi joli mais ça va faire.