Le but de PHP constructeurs
Je suis en train de travailler avec des classes d'objet et de la structure de la classe, mais pas à un niveau complexe – il suffit de classes et de fonctions, puis, en un seul endroit, de l'instanciation.
À __construct
et __destruct
, merci de me le dire très simplement: quel est le but des constructeurs et destructeurs?
Je sais que le niveau de l'école explication théorique, mais je m'attends à quelque chose comme dans le monde réel, comme dans les situations qui nous devons les utiliser.
Fournir un exemple, s'il vous plaît.
Ce qui concerne
- eac exemple sont vraiment bon, maintenant, je peu comprendre pourquoi les gens sont à la recherche de constructeur et desructor , mais dites-moi , si je ne suis pas utilisé le constructeur , je lâche rien...bcoz dans le programme que nous utilisons beaucoup de fonctions , varaibles et donc..pour les fonctions et les variabl, comment puis-je utiliser les constructions, est-il une dynamique attribution de là, signifie, nous devrions l'appeler tous les nom de la fonction à l'intérieur du constructeur ,
- quelle est la raison possible de ne pas l'accepter ... de réponse .... j'y ai trouvé de réponse vraiment répondre à la question
Vous devez vous connecter pour publier un commentaire.
Un constructeur est une fonction qui est exécutée après que l'objet a été initialisé (son mémoire allouée, les propriétés de l'occurrence copié etc.). Son but est de mettre l'objet dans un état valide.
Souvent, un objet, d'être dans un état utilisable, nécessite des données. L'objectif du constructeur est de forcer ces données pour être donné à l'objet à l'instanciation de temps et d'interdire toutes les instances sans de telles données.
Envisager une simple classe qui encapsule une chaîne et a une méthode qui retourne la longueur de cette chaîne. Une implémentation possible serait:
Pour être dans un état valide, cette fonction nécessite
setInnerString
être appelée avantgetLength
. En utilisant un constructeur, vous pouvez forcer toutes les instances pour être dans un bon état lorsquegetLength
est appelé:Vous pouvez aussi garder le
setInnerString
pour permettre à la chaîne d'être modifié après l'instanciation.Un destructeur est appelé lorsqu'un objet est sur le point d'être libéré de la mémoire. Généralement, il contient un code de nettoyage (par exemple, la fermeture de descripteurs de fichier de l'objet est la détention). Ils sont rares en PHP parce que PHP nettoie toutes les ressources détenues par le script lors de l'exécution du script se termine.
Apprendre par l'exemple:
Pourquoi est-ce utile? Parce que, au lieu de:
vous pouvez utiliser:
Qui est moins de code et regarde de plus en plus propre!
Remarque: les réponses ci-dessous correctement l'état, les constructeurs/destructeurs sont utilisés pour une grande variété de choses, y compris: de/initialisation des variables (en particulier lorsque la valeur est variable), la mémoire de/l'allocation, les invariants (qui peut être dépassé) et plus propre code.
Je tiens également à noter que les plus "propres " code" n'est pas seulement le "sucre" mais améliore la lisibilité, facilité de maintenance, etc.
Le constructeur est exécuté au moment de l'instanciation d'une instance de votre classe. Donc, si vous avez une classe
Person
:À démontrer:
Nous pouvons remplacer la valeur par défaut définie avec initialisation par l'argument du constructeur:
Espérons-le, qui permet de démontrer où le constructeur et le destructeur sont appelés, quels sont-ils utiles pour?
__construct()
pouvez par défaut de certains membres de la classe de ressources ou de plusieurs structures de données complexes.__destruct()
peut libérer des ressources telles que le fichier de base de données et les poignées.Le constructeur d'une classe définit ce qui se passe lorsque vous instanciez un objet de cette classe. Le destructeur d'une classe définit ce qui se passe quand vous détruisez l'instance de l'objet.
Voir le Manuel PHP sur les Constructeurs et les Destructeurs:
et
Dans la pratique, vous devez utiliser le Constructeur pour mettre l'objet dans un minimum d'état valide. Cela signifie que vous attribuez les arguments passés au constructeur pour les propriétés de l'objet. Si votre objet utilise une sorte de types de données qui ne peuvent être attribués directement à un titre de propriété, vous créez ici, par exemple,
Noter que pour garder vos objets testable, un constructeur ne doit pas faire de vrai travail:
Ci-dessus
Example
, le$database
est un collaborateur. Il a un cycle de vie et le but de son propre et pourrait être une instance partagée. Vous le créez pas à l'intérieur du constructeur. D'autre part, laSplObjectStorage
est une partie intégrante deExample
. Il a le même cycle de vie et n'est pas partagée avec d'autres objets. Donc, c'est bien denew
dans le ctor.De même, vous utilisez le destructeur de nettoyer après votre objet. Dans la plupart des cas, c'est inutile parce que c'est géré automatiquement par PHP. C'est pourquoi vous verrez beaucoup plus ctors que dtors dans la nature.
J'ai trouvé que c'était plus facile à comprendre quand j'ai pensé à la
new
mot-clé avant que le constructeur: il dit simplement que ma variable d'un nouvel objet de son type de données serait donner à lui, sur la base duquel le constructeur que j'appelle et que je passe en elle, je peux définir l'état de l'objet à l'arrivée.Sans que le nouvel objet, nous permettrait de vivre dans la terre de
null
, et les plantages!Le Destructeur est le plus évident, à partir de C++ point où, si vous n'avez pas un destructeur de la méthode d'effacer toute la mémoire pointé, il restera utilisé après le programme des sorties provoquant des fuites et le décalage sur les clients OS jusqu'au prochain redémarrage.
Je suis sûr qu'il ya plus de suffisamment de bonnes informations ici, mais sous un autre angle est toujours utile de ce que j'ai remarqué!
constructeur est fonction de la classe qui est exécuté automatiquement lorsque l'objet de la classe est créée, nous n'avons pas besoin d'appeler ce constructeur séparément, nous pouvons dire que le constructeur en tant que méthode magique car en php méthode magique de commencer avec le double de caractères de soulignement