Si une utilisation est utilisée sous une circonstance getters-setters d'une classe dans la classe? p>
4 Réponses :
Les configurateurs getters sont généralement utilisés à partir de la classe extérieure de l'intérieur accédant directement aux champs.
L'avantage principal / but est encapsulation em> de getterstters, Si vos getters setters disposent d'un certain code logique, utilisez-le. P> Par exemple: P> public void setValue(int val){
if(val > 100)
this.val = 0;
else
this.val = val;
}
@Geolez je ne vois pas la balise PHP par op, son concept de OOP décrit ici non spécifique à une langue
Oui, les getters et les setters sont utiles. Étant donné que PHP ne prend pas en charge les indications de type pour des types simples tels que INT ou String, vous ne pouvez pas forcer une valeur à être du type droit. p>
En utilisant un setter, vous avez toujours la possibilité de vérifier la valeur définie. Lorsqu'une valeur définie sur une propriété INT n'est pas une INT, vous pouvez choisir de le taper, ou d'élever une erreur, au lieu d'accepter simplement la mauvaise valeur. p>
Cela facilitera le débogage et le maintien de votre application. Il est donc judicieux d'utiliser des getters et des setters, même s'ils ne contiennent pas beaucoup de logique autres que ces chèques. P>
+ 1.that est utile merci et org.life a raison. Je n'ai pas ajouté d'une balise spécifique à la langue
Vous êtes censé utiliser les getters et le réglage presque partout, y compris à l'intérieur de la classe. Si vous ne le faites pas, alors vous avez potentiellement une encapsulation de casse et pire encore, vous pouvez invalider vos invitations.
comme exemple simple en C ++: P>
class BankAccount { public: void withdraw(int amount) { m_balance -= amount; m_withdrawals++; } void transfer(BankAcount& other, int amount) { m_balance -= amount; other.m_balance += amount; } private: int m_balance; int m_withdrawals; };
Je pense que vous avez décrit des exemples de pas pour les getters / setters mais plutôt l'encapsulation
Getters et setters sont i> encapsulation - c'est tout leur objectif.
"Les getters and Setters sont l'encapsulation" Non :) getters et setters enfreignent l'encapsulation. L'objet d'encapsulation == n'abandonne pas ses données (propriétés) à l'extérieur.
@smentek: Vous êtes déroutant l'encapsulation avec une confinement solitaire :)
Non. Situé à Lire Allen's Holub: "Apprendre des modèles de conception en regardant le code"
+ 1.Merci pour votre réponse.Vous avez raison et j'étais entre vous et org.life pour la bonne réponse, mais je pense que l'org.life a donné une réponse plus complète pour moi.
@goleztrol
Il n'y a pas de badge PHP sur la succursale et vous vous trompez. Ce que vous décrivez n'a rien à voir avec des setters. Vous pouvez forcer le type de paramètre (en PHP) à l'aide de n'importe quelle méthode non seulement d'un setter. p>
Vous pouvez écrire: p> ou juste: p> comme vous voyez je vois que je t Vous avez besoin de setters pour appliquer le type de propriétés d'objet. p> et une erreur d'erreur dans le réglage après avoir vérifié le type de variable est une mauvaise idée de toute façon. Il s'agit d'une erreur courante des programmeurs qui sont passés de la langue statiquement typée de la langue de type dynamique. P> Setteurs et getteurs sont des congrès et ils n'appliquent rien! Strong>
Aujourd'hui, nous les utilisons habituellement pour la création d'objets de java nature nature. (Pojo - en PHP Word Popo) Il est donc juste une convétion (standard) pour la création d'objets pouvant utiliser entre bibliothèques ou projets. P> Vous pouvez combiner des setters avec une vérification de type ou tout ce que vous ne les faites pas quelque chose plus que ce qu'ils ne le sont. p> à propos de l'encapsulation: P> @ org.life .java - Jigar Joshi P> "L'avantage principal / but est
Encapsulation de getterstters, " p>
BlockQuote> @Peter Alexander P> "Vous êtes censé utiliser les getters
et setter presque partout,
y compris à l'intérieur "la classe. Si vous
NE PAS, alors vous êtes potentiellement
briser l'encapsulation "" getters et
Setteurs sont encapsulation " p>
BlockQuote> mauvais, mauvais, mauvais fort>. L'encapsulation n'a rien à voir avec les getters et les setters forts> et c'est une erreur très courante. Je sais qu'il y a beaucoup d'articles le répète encore et encore à l'envers ... encapsulation == Object prend en charge ses données et DOS ne donne pas de données de ligne. Et getter sur une propriété privée est nothig plus que de rendre cette propriété publique dans la mode complexe == Encapsulation de freinage. P> Encapsulation de paragraphe chceck: http://fr.wikipedia.org/wiki/c%2b%2b ou
Les getters and Setters ne vous aident pas l'encapsulation encore pire, ils peuvent casser l'encapsulation. Ils le font lorsque vous les utilisez pour obtenir des données d'objet au lieu de demander à votre objet de faire quelque chose pour vous avec ses propres données. p>
Du wiki: "[Encapsulation est] une construction de langue qui facilite le regroupement de données avec les méthodes (ou d'autres fonctions) fonctionnant sur ces données." Les getters and Setters sont les méthodes qui sont regroupées dans une classe à utiliser sur ses données. Quoi qu'il en soit, je vous ai donné un -1 parce que vous n'avez pas répondu à la question et vous avez seulement affiché pour harceler les autres intervenants. Utilisez des commentaires pour cela.
+ 1.Bien que vous soyez un peu edgy, vous présentez un point de vue intéressant. Je dois faire un peu plus de lecture sur cela. Merci de vous
Je ne me trompe pas, mal, mal, seule ma réponse aurait pu être trop spécifique pour PHP. Vous avez tort, car vous ne pouvez pas i> appliquer tout type en utilisant le type d'allusion. Votre indice "X" ne fonctionnera que pour les cours et les tableaux, et dans le cas d'un tableau, il n'y a toujours pas de soupçon de ce qui devrait être dans i> la matrice. Naturellement, vous pouvez le faire avec d'autres méthodes également, mais parce que vous avez besoin du code de vérification de type pour être sûr, vous devez toujours créer un setter et i> toujours utiliser ce setter, même dans les méthodes de cette classe. Mais c'est pour PHP, la plupart des autres langues sont dactylographiées et n'ont pas besoin de cela pour des contrôles supplémentaires.
Et bien sûr, ce n'est pas une bonne idée d'exposer un objet privé d'un autre objet via un setter, mais lorsqu'il s'agit de types plus simples, cela devrait difficilement être un problème. Je peux exposer un int via un setter en C ++. Et en effectuant la virtuelle du setter, je peux décider d'une classe descendante à implémenter un réglage différent qui ne fixe même pas la variable privée. Maintenant, assurez-vous de ne pas créer un setter public pour des choses que vous ne voulez pas être réglées de l'extérieur, mais dans beaucoup de cas, cela a un sens. ...
... Si j'avais un objet de personne, je voudrais définir son âge à travers une méthode de la méthode code> ou une propriété
Âge code>. Est-ce que
setage code> un setter dans ce cas? Vous pouvez l'appeler autrement si vous voulez, mais je pense que c'est juste une question de perception. Si vous vous sentez plus sûr en nommant cette fonction
setagebynotusingsetter code> alors je pense que vous vous trompez.
En outre, vous parlez de ma réponse PHP, mais je ne vois aucune balise code> encapsulation code> dans la question. :)