Dans le développement de PHP, lorsque vous essayez d'accéder directement à un membre de classe défini comme privé, une erreur se produit souvent avec "Essayez d'accéder à un membre privé". La raison fondamentale de ce problème réside dans le mécanisme de contrôle d'accès de PHP: les membres privés ne peuvent accéder qu'à l'interne de la classe, tandis que l'accès externe sera interdit.
PHP fournit trois modificateurs d'accès pour contrôler la gamme d'accessibilité des membres:
Par conséquent, l'accès aux membres privés directement depuis l'extérieur de la classe augmente une erreur.
Les méthodes magiques de PHP __get () et __set () nous permettent d'accéder indirectement des propriétés privées. Avec ces deux méthodes, les valeurs des membres privés peuvent être lues et écrites en toute sécurité en dehors de la classe.
classe myClass { Private $ privatemember; fonction publique __get ($ name) { if ($ name === 'privatemember') { retourner $ this-> privatemember; } } fonction publique __set ($ name, $ value) { if ($ name === 'privatemember') { $ this-> privateMember = $ valeur; } } } $ obj = new myClass (); $ obj-> privateMember = 'Hello, world!'; // Définir les membres privés echo $ obj-> privateMember; // obtenir et produire la valeur du membre privé
Dans l'exemple ci-dessus, nous utilisons __get () pour déterminer si le nom d'attribut demandé est privateMember et renvoyer la valeur correspondante; Nous utilisons __set () pour y attribuer l'attribut. Cela évite les erreurs causées par l'accès direct aux membres privés.
Si vous souhaitez accéder à des membres privés de manière semblable à un tableau, vous pouvez laisser la classe implémenter l'interface ArrayAccess intégrée de PHP et réécrire ses méthodes pour obtenir un accès flexible:
class MyClass implémente ArrayAccess { Private $ privatemember; Fonction publique Offsexists ($ Offset) { return $ offset === 'privateMember'; } Fonction publique OffsetGet ($ offset) { retourner $ this -> $ offset; } fonction publique offSetset ($ offset, $ value) { $ this -> $ offset = $ valeur; } Fonction publique OffsetUnset ($ offset) { unset ($ this -> $ offset); } } $ obj = new myClass (); $ obj ['privatemember'] = 'Bonjour, monde!'; // Définir les membres privés echo $ obj ['privatemember']; // obtenir et produire la valeur du membre privé
En implémentant l'interface ARRAYACCESS, vous pouvez utiliser une syntaxe de type tableau pour faire fonctionner des membres privés, améliorant davantage la flexibilité du code.
Lorsque l'erreur PHP invite "Essayez d'accéder aux membres privés", il est recommandé d'utiliser Magic Methods __get () et __Set (), ou de mettre en œuvre l'interface ArrayAccess pour accéder aux membres privés de manière légale et sécurisée. Cela évite non seulement les erreurs, mais rend également le code plus extensible et maintenable.