In der PHP -Entwicklung tritt bei dem Versuch, direkt auf ein als privat definiertes Klassenmitglied zuzugreifen, ein Fehler auf, bei dem "Versuch, auf ein privates Mitglied zuzugreifen". Der grundlegende Grund für dieses Problem liegt im PHP -Zugangskontrollmechanismus: Private Mitglieder können nur intern der Klasse zugreifen, während der externe Zugriff verboten ist.
PHP bietet drei Zugriffsmodifikatoren, um den Zugangsbereich der Mitglieder zu steuern:
Daher erhöht der Zugriff auf private Mitglieder direkt von außerhalb der Klasse einen Fehler.
Die magischen Methoden von PHP __get () und __set () ermöglichen es uns, indirekt auf private Eigenschaften zuzugreifen. Mit diesen beiden Methoden können private Mitgliederwerte außerhalb der Klasse sicher gelesen und geschrieben werden.
Klasse myclass { privates $ privatemember; öffentliche Funktion __get ($ name) { if ($ name === 'privatemember') { Return $ this-> privatemember; } } öffentliche Funktion __set ($ name, $ value) { if ($ name === 'privatemember') { $ this-> privatemember = $ value; } } } $ obj = new MyClass (); $ obj-> privatemember = 'Hallo, Welt!'; // privates Mitglied echo $ obj-> privatemember; // den Wert des privaten Mitglieds erhalten und ausgeben
Im obigen Beispiel verwenden wir __Get (), um festzustellen, ob der angeforderte Attributname Privatemember ist, und den entsprechenden Wert zurückzugeben. Wir verwenden __set (), um das Attribut zuzuweisen. Dies vermeidet Fehler, die durch den direkten Zugang zu privaten Mitgliedern verursacht werden.
Wenn Sie auf Array-ähnliche Weise auf private Mitglieder zugreifen möchten, können Sie die Klasse die integrierte ArrayAccess-Schnittstelle von PHP implementieren und ihre Methoden umschreiben, um einen flexiblen Zugriff zu erzielen:
Klasse Myclass implementiert ArrayAccess { privates $ privatemember; öffentliche Funktion OffsetExists ($ offset) { return $ offset === 'privatemember'; } öffentliche Funktion Offsetget ($ offset) { Rückgabe $ this-> $ offset; } öffentliche Funktion offsetset ($ offset, $ value) { $ this-> $ offset = $ value; } öffentliche Funktion Offsetunset ($ offset) { nicht fest ($ this-> $ offset); } } $ obj = new MyClass (); $ obj ['privatemember'] = 'Hallo, Welt!'; // privates Mitglied echo $ obj ['privatemember']; // den Wert des privaten Mitglieds erhalten und ausgeben
Durch die Implementierung der ArrayAccess-Schnittstelle können Sie Array-ähnliche Syntax verwenden, um private Mitglieder zu betreiben, wodurch die Code-Flexibilität weiter verbessert wird.
Wenn PHP -Fehler "versuchen, auf private Mitglieder zuzugreifen", wird empfohlen, magische Methoden __Get () und __set () zu verwenden oder die Interface ArrayAccess zu implementieren, um auf gesetzliche und sichere Weise auf private Mitglieder zuzugreifen. Dies vermeidet nicht nur Fehler, sondern macht den Code auch erweiterbar und wartbarer.