Comment obtenir une instance d'une classe spécifique en PHP?
J'ai besoin de vérifier si il n'y existe une instance de class_A
,et si il y existe, obtenir cette instance.
Comment le faire en PHP?
Comme toujours, je pense à un exemple simple est la meilleure.
Maintenant mon problème est devenu:
$ins = new class_A();
Comment conserver une instance dans une variable membre statique de class_A
lors de l'instanciation?
Ce sera mieux si l'instance peut être stockée lors de l'appel de __construct()
. Dire, il devrait fonctionner sans restriction sur la façon dont il est instancié.
Il n'y a pas de solution magique pour trouver un objet, sachant que sa classe. Vous allez devoir mettre votre instance, vous pouvez le retrouver plus tard.
Avec au moins huit réponses et Singleton, de Registre et de instanceof, etc tout ce qui est mentionné, vous pourriez voulez être plus précis sur ce que vous essayez de faire.
Avec au moins huit réponses et Singleton, de Registre et de instanceof, etc tout ce qui est mentionné, vous pourriez voulez être plus précis sur ce que vous essayez de faire.
OriginalL'auteur user198729 | 2010-01-21
Vous devez vous connecter pour publier un commentaire.
Ce que vous avez décrit, c'est essentiellement le pattern singleton. Veuillez voir cette question pour de bonnes raisons pourquoi vous ne pourriez pas vouloir faire cela.
Si vous voulez vraiment le faire, vous pourriez mettre en place quelque chose comme ceci:
$c'est l'objet courant. l'autonomie est la classe actuelle - que vous utilisez pour accéder à des membres statiques.
Qu'est-ce que le cas d'utilisation pour cela?
pour le moteur de template.J'utilise
extract
pour remplir des variables PHP dans le fichier de modèle.Mais j'ai aussi besoin de renseigner les variables javascript,qui ne peut pas être réalisé avecextract
,mais insérer<script>
au bon endroit,j'ai donc besoin d'une solution pour obtenir mon exemple dans le fichier de modèle.J'espère avoir répondu à votre question.qui sonne complètement faux et je ne comprends toujours pas ce que vous auriez besoin de le code ci-dessus. Mais je n'ai pas à le comprendre, alors allez-y 🙂
OriginalL'auteur Tom Haigh
Ce que vous demandez est impossible (Bien, peut-être pas dans un sens technique, mais très peu pratique). Il suggère que vous avez un profond malentendu sur le but de les objets et les classes.
Il s'agit d'un cas d'utilisation pour le pattern Singleton, qui est en effet possible de mettre en œuvre en PHP.
OriginalL'auteur troelskn
Vous devez implémenter le pattern Singleton. http://www.developertutorials.com/tutorials/php/php-singleton-design-pattern-050729/page1.html
class_A n'a pas à devenir le singleton. Vous pouvez créer un class_B qui détient un seul class_A.
Qui fonctionne si l'utilisateur va être responsable de l'instanciation de class_A, et peut s'assurer qu'il est fait à travers class_B. Que faire si l'instance de class_A est généré par un autre morceau de code qui est pas au courant de class_B?
Alors vous êtes assez vissé.
Le lien est cassé.
OriginalL'auteur Pikrass
Peut-être vous voulez quelque chose comme
EDIT:
Après la lecture, vous devez sauter à travers des cerceaux pour obtenir des références d'objet. De sorte que vous pouvez
return $$key;
au lieu dereturn $value;
. Ou quelques autres astuces pour obtenir une référence à l'objet.C'est exactement ce que l'OP a demandé, j'espère juste que vous n'obtenez pas de bas voté pour celui-ci.
Il n'y a pas de solution miracle pour... Et ça peut s'aggraver si vous le souhaitez pour gérer la récursivité (les objets à l'intérieur de matrices multi-dimensionnelles).
Je crois que, sans être en mesure d'appliquer l'un des autres motifs décrits (ce qui vous obligera soit à un contrôle de l'instanciation de l'objet ou de modifier l'objet lui-même), c'est le meilleur que vous pouvez faire. Cependant, vous pouvez fusionner les ci-dessus avec le modèle de registre, de sorte que vous n'avez qu'à prendre de la performance frappé une fois.
Le code ci-dessus ne fonctionne pas. Il n'y a pas de vars à l'intérieur de la portée de la fonction (de plus, il a des erreurs de syntaxe).
OriginalL'auteur Dathan
Le pattern singleton, avec un En PHP, par exemple à partir de Wikipedia que j'ai ajouté un "checkExists" la méthode, car on dirait que vous voulez vérifier l'existence de la classe, sans nécessairement créer si elle n'est pas sortie:
Singleton::getInstance()
retourne un existant instance.Aucune opération n'est effectuée surself::$_instance
dans__construct()
J'ai créé l'instance de cette façon, quelque part:
$ins = new class_A()
,j'ai donc besoin d'Singleton::getInstance()
de travail dans ce casPourquoi ne pouvez-vous pas changer de $ins = new class_A (); $ins = Singleton::getInstance()?
Il y a trop d'endroits pour changer.Donc ça va être mieux si l'instance peut être stockée lors de l'appel de
__construct()
Si il y a trop d'endroits pour changer, alors il est probable qu'il va y avoir plus d'une instance dans l'existence, à tout moment, auquel cas la question d'origine n'a pas beaucoup de sens.
OriginalL'auteur Karl B
if ($object instanceof class_A)
Voir manuel PHP: les Classes et les objets
$object
OriginalL'auteur Pekka 웃
Je pense que ce que vous voulez, c'est le Modèle De Registre
OriginalL'auteur AntonioCS
De s'étendre sur les Pikrass réponse, fondamentalement, vous aurez envie de faire quelque chose comme ceci:
OriginalL'auteur Aistina
Rappelez-vous que par l'utilisation d'un singleton, vous êtes essentiellement en la création d'un grand variable globale. S'il y a l'état qui change, votre code peut devenir imprévisible. Donc faire preuve de prudence.
OriginalL'auteur JW.
Si le remplacement du singleton instanciation d'instrucion dans vos fichiers est un problème que vous pouvez transformer en une constante piloté par le comportement: les constantes sont pour toute la durée du script, donc dans le cas d'une instance dont l'exigence est d'être unique (pour tout le script durée) la méthode de construction peut être correctement relié à l'existence et à la valeur d'une constante.
OriginalL'auteur Emanuele Del Grande
Le code ci-dessous est une mise en cache de la qualité qui promeut l'efficacité:
Bien que figurant coûteux, il est négligeable.
Vous pouvez noter que trouver le dernier ajout de la variable par l'intermédiaire d'un mondial de la variable de boucle est impossible, tout en restant dans la construction de la fonction.
OriginalL'auteur Jesse Westendorf