Unterschied und Vergleich der drei Schlüsselwörter this, self und parent in PHP
Freigeben: 2016-08-08 09:30:55
Original
994 Leute haben es durchsucht
Die drei Schlüsselwörter „dies“, „selbst“ und „Eltern“ sind wörtlich leichter zu verstehen und beziehen sich jeweils auf „dies“, „selbst“ und „Vater“. Dies ist der Zeiger auf das aktuelle Objekt (verwenden wir den Zeiger in C) self ist der Zeiger auf die aktuelle Klasse Parent ist ein Zeiger auf die übergeordnete Klasse (wir verwenden hier häufig Zeiger, um es zu beschreiben, da es keine bessere Sprache gibt, um es auszudrücken)Lassen Sie uns einen Blick anhand tatsächlicher Beispiele werfen (1) dies1
2
3 Klasse Benutzername
4 {
5 //Mitgliedsattribute definieren
6 privater $name;
7
8 //Konstruktor definieren
9 function __construct( $name )
10 {
11 $this-> name = $name; //Dieser Zeiger wurde hier verwendet
12 }
13
14 //Destruktor
15 Funktion __destruct(){}
16
17 //Benutzernamen-Mitgliedsfunktion drucken
18 Funktion printName()
19 {
20 print( $this->name ); // Dieser Zeiger wird erneut verwendet
21 }
22 }
23
24 //Objekt instanziieren
25 $nameObject = new UserName( "heiyeluren" );
26
27 //Drucken ausführen
28 $nameObject-> ;printName() ; //Ausgabe: heiyeluren
29
30 //Zweite Instanziierung des Objekts
31 $nameObject2 = new UserName( "PHP5 " );
32
33 //Drucken ausführen
34 $nameObject2->printName( ); //Ausgabe: PHP5
35 ?>
Wir sehen, dass die obige Klasse diesen Zeiger in den Zeilen 11 bzw. 20 verwendet, dann dies. An wen ist es gerichtet?
Tatsächlich bestimmt dies, auf wen es zeigt, wenn es beispielsweise zum ersten Mal instanziiert wird (Zeile 25),
dann dies auf das Objekt $nameObject zeigt, wird beim Drucken in Zeile 18 print( $this->name ) in print( $nameObject->name ) geändert, dann wird natürlich „heiyeluren“ ausgegeben.
Im zweiten Fall wird print( $this- >name ) zu print( $nameObject2->name ), sodass „PHP5“ ausgegeben wird.
Dies ist also ein Zeiger auf die aktuelle Objektinstanz und zeigt nicht auf ein anderes Objekt oder eine andere Klasse.
(2)self
Zunächst müssen wir klarstellen, dass self auf die Klasse selbst zeigt, das heißt, self zeigt nicht auf eine instanziierte Klasse Im Allgemeinen wird self verwendet, um auf statische Variablen in der Klasse zu verweisen.
1
2
3-Klassen-Zähler
4 {
5
8
9 🎜> 12 $ this- & gt; lastCount = ++ selfT :: $ FirstCount; Rufen Sie statische Variablen auf. Wenn Sie self aufrufen, müssen Sie Folgendes verwenden: (Feldoperationssymbol)
13 }
14
15 🎜 >17 🎜>21
22 //Instanziiertes Objekt
23 $countObject = new Counter();
24
25 $countObject->printLastCount(); //Ausgabe 1
26
27 ?>
Wir müssen hier nur auf zwei Stellen achten, Zeile 6 und Zeile 12.
Wir haben in der zweiten Zeile eine statische Variable $firstCount definiert, deren Anfangswert 0 ist. Dann haben wir diesen Wert in Zeile 12 aufgerufen, mit self zum Aufrufen und mit „ in der Mitte :: " Zum Verbinden nennen wir
einen Domänenoperator. Was wir zu diesem Zeitpunkt also aufrufen, ist die statische Variable $frestCount, die von der Klasse selbst definiert wird. Unsere statische Variable hat nichts mit der Instanz zu tun des folgenden Objekts. Es bezieht sich nur auf die Klasse
Dann rufe ich die Klasse selbst auf, dann können wir this nicht zum Referenzieren verwenden, wir können self zum Referenzieren verwenden,
Weil self auf die Klasse selbst verweist, nicht auf eine Objektinstanz. Mit anderen Worten: Wenn unsere Klasse statische Mitglieder hat, müssen wir sie auch mit self aufrufen.
(3)parent
Wir wissen, dass parent ein Zeiger auf die übergeordnete Klasse ist. Im Allgemeinen verwenden wir parent, um den Konstruktor der übergeordneten Klasse aufzurufen.
1
2
3 //Basisklasse
4 Klasse Tier
5 {
6 //Attribute der Basisklasse
7 public $name; //Name
8
9 //Konstruktorfunktion der Basisklasse
10 öffentliche Funktion __construct( $name )
11 {
12 } $this->name = $name;
13 }
14 }
15
16 //Abgeleitete Klasse
17 Klasse Person erweitert Tier //Personenklasse erbt Tierklasse
18 {
19 public $personSex; //Gender
20 public $personAge
21
22 //Geerbter Klassenkonstruktor
23 function __construct( $personSex, $personAge )
24 {
25 parent :: __construct( "heiyeluren" ); //Der Konstruktor der übergeordneten Klasse wird mit parent
26 $this->personSex = $personSex;
27 $ aufgerufen this->personAge = $personAge;
28 }
29
30 function printPerson()
31 {
32 print( $this->name. " ist " .$this->personSex. ",dieses Jahr " .$this->personAge
33 }
34 }
35
36 //Instanziiere das Personenobjekt
37 $personObject = new Person( "männlich", "21");
38
39 //Drucken ausführen
40 $personObject->printPerson(); //Ausgabe: heiyeluren ist dieses Jahr 21
41
42 ?> 🎜>
Wir achten auf folgende Details: Mitgliedsattribute sind alle öffentlich, insbesondere die der übergeordneten Klasse, damit geerbte Klassen darüber zugreifen können.
Wir achten auf den entscheidenden Punkt, Zeile 25: parent::__construct( "heiyeluren"). Zu diesem Zeitpunkt verwenden wir parent, um den Konstruktor der übergeordneten Klasse aufzurufen und die übergeordnete Klasse zu initialisieren.
Da die Mitglieder der übergeordneten Klasse alle öffentlich sind, können wir dies direkt verwenden, um die geerbte Klasse aufzurufen.
Zusammenfassung:
Dies ist ein Zeiger auf die Objektinstanz, self ist ein Verweis auf die Klasse selbst und parent ist ein Verweis auf die übergeordnete Klasse .
Nachdruck von: http://blog.csdn.net/skynet001/article/details/7518164
Das Obige stellt die Unterscheidung und den Vergleich der drei Schlüsselwörter this, self und parent in PHP vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich sein wird, die an PHP-Tutorials interessiert sind.
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
Neueste Artikel des Autors
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31