Il semble que différentes instances d'une classe puissent connaître les variables membres privées de l'autre.Scope PHP et interaction d'instance de classe
J'ai fourni du code qui tente de montrer mon problème, et je vais essayer de l'expliquer.
Nous avons une classe avec une variable membre privé, $hidden
. modifyPrivateMember
définit la valeur de $hidden
à 3
. accessPrivateMember
prend un Object
en tant que paramètre et accède à son privé$hidden
membre pour renvoyer sa valeur.
code Exemple:
<?php
// example.php
class Object {
private $hidden;
public function modifyPrivateMember() {
$this->hidden = 3;
}
public function accessPrivateMember(Object $otherObject) {
return $otherObject->hidden;
}
}
$firstObject = new Object;
$firstObject->modifyPrivateMember();
$otherObject = new Object;
echo $otherObject->accessPrivateMember($firstObject);
sortie du code ci-dessus:
$ php example.php
3
Quelqu'un peut-il expliquer pourquoi les membres privés d'objets sont accessibles à d'autres instances de la même classe? Y a-t-il une justification à cette violation manifeste de la portée?
Les réponses jusqu'à présent viennent de me dire ce que le code a illustré. Je cherche vraiment une réponse à la question de * pourquoi * les choses sont comme ça. Pourquoi la visibilité est-elle restreinte à la classe et n'est-elle pas un objet? Quels avantages cela offre-t-il? –
Je ne fais que spéculer en ce moment, mais PHP emprunte allot de Java, y compris le comportement des modificateurs. Peut-être que le Java doit le faire au niveau de la classe à cause du système de type. Peut-être que cela explique pourquoi ruby peut le faire au niveau de l'instance. Mais encore une fois c'est juste une spéculation. – MrHus