Heim > Backend-Entwicklung > PHP-Tutorial > Wie greife ich direkt auf private Attribute in PHP-Instanzobjekten zu?

Wie greife ich direkt auf private Attribute in PHP-Instanzobjekten zu?

黄舟
Freigeben: 2023-03-16 16:10:02
Original
1655 Leute haben es durchsucht

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum direkten Zugriff auf die privaten Attribute im PHP-Instanzobjekt ein. Der Artikel stellt ihn im Detail anhand des Beispielcodes vor Wer braucht es? Lassen Sie uns gemeinsam mit dem Herausgeber unten lernen.

Vorwort

In diesem Artikel werden vor allem die relevanten Inhalte zum direkten Zugriff auf private Attribute im PHP-Instanzobjekt vorgestellt Teile, wir Sehen uns zunächst die objektorientierte Zugriffskontrolle von PHP an.

Die Zugriffskontrolle auf Eigenschaften oder Methoden wird durch das voranstellen der Schlüsselwörter public (public), protected (protected) oder private (private) erreicht. Auf Klassenmitglieder, die als öffentlich definiert sind, kann von überall aus zugegriffen werden. Auf Klassenmitglieder, die als geschützt definiert sind, können sowohl sie selbst als auch ihre Unterklassen und übergeordneten Klassen zugreifen. Als privat definierte Klassenmitglieder können nur von der Klasse aufgerufen werden, in der sie definiert sind.

Klassenattribute müssen als öffentlich, geschützt oder privat definiert werden. Wenn es mit var definiert ist, gilt es als öffentlich.

Bitte sehen Sie sich den Beispielcode unten an (aus der offiziellen Dokumentation: http://php.net/manual/en/sprache.oop5.visibility.php


<?php
/**
 * Define MyClass
 */
class MyClass
{
 public $public = &#39;Public&#39;;
 protected $protected = &#39;Protected&#39;;
 private $private = &#39;Private&#39;;

 function printHello()
 {
  echo $this->public;
  echo $this->protected;
  echo $this->private;
 }
}

$obj = new MyClass();
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Public, Protected and Private
Nach dem Login kopieren

Wie im obigen Code gezeigt, wird ein schwerwiegender Fehler ausgegeben, wenn wir ein Instanzobjekt einer Klasse verwenden, um auf ein privates oder geschütztes Mitgliedsattribut einer Klasse zuzugreifen

Das Folgende ist: Der Artikeltitel muss auf die privaten Eigenschaften des PHP-Instanzobjekts zugreifen.

Gemäß unserer normalen Praxis schreiben wir normalerweise eine öffentliche Methode Dann geben Sie diese Eigenschaft zurück.


public function getPrivate()
{
 return $this->private;
}
Nach dem Login kopieren

Tatsache ist, dass wir dies tun sollten

Das Folgende ist nur eine Verwendungsmethode in speziellen Szenarien Ich hoffe, Sie schreiben in normalen Zeiten keinen Code.


<?php
class A {
 private $a = &#39;self&#39;;
 public function test() {
  $other = new self();
  $other->a = &#39;other&#39;;
  var_dump($other->a);
 }
}

$aa = new A();
$aa->test();
Nach dem Login kopieren

Wie im obigen Code gezeigt, haben wir ein neues A-Objekt erstellt und dem privaten Attribut einen Wert zugewiesen a dieser Instanz, aber es wurde kein Fehler gemeldet! ​​

Erklärung: Weil Objekte derselben Klasse auf die privaten und geschützten Mitglieder der anderen Klasse zugreifen können, auch wenn sie nicht dieselbe Instanz sind aufgrund der spezifischen Implementierungsdetails innerhalb dieser Objekte ist bekannt

Zusammenfassung

Das obige ist der detaillierte Inhalt vonWie greife ich direkt auf private Attribute in PHP-Instanzobjekten zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage