bei der Verwendung von selbst, übergeordnete, statische und wie?

9

Wenn ich inzwischen ein wenig verstanden habe, verstehe ich jetzt, dass ich nichts verstehe. Ich bin so verwirrt und ich bemühe mich zu verstehen und ich kann nicht. Jemand kann dieses Programm erklären, wenn er selbst, Eltern, statisch und wie Die kleinste Änderung, die ich mache, ändert das Ergebnis, ohne dass ich nicht verstehen kann, was vor sich geht. Vielen Dank.

der Code von Ссылка

%Vor%

Der Ausgang ist:

%Vor%     
israel love php 08.05.2012, 18:14
quelle

3 Antworten

18

Sie müssen das Konzept der späten statischen Bindung verstehen, was bestimmt, dass wenn ein Bezeichner an Code / Daten gebunden ist. Sie können PHP anweisen, es früh zu binden ( self:: ) oder später ( static:: ).

Wenn wir das Beispiel auf zwei Klassen reduzieren, erhalten wir:

%Vor%     
webbiedave 08.05.2012, 18:53
quelle
6

Schau dir Ссылка an. Es sagt:

  

Wenn Klasseneigenschaften oder Methoden als statisch deklariert werden, sind sie zugänglich, ohne dass eine Instanz der Klasse erstellt werden muss.

     

...

     

Da statische Methoden ohne eine Instanz des erstellten Objekts aufgerufen werden können, ist die Pseudovariable $ this innerhalb der als statisch deklarierten Methode nicht verfügbar.

Sie können $this nicht verwenden, da beim Aufruf einer statischen Methode kein instanziiertes Klassenobjekt in die Variable $this eingefügt wird. Also benutzt du self:: .

parent:: bezieht sich auf die Elternklasse, die die aktuelle Klasse erweitert. Für Klasse C ist die übergeordnete Klasse beispielsweise Klasse B und für Klasse B die übergeordnete Klasse Klasse A. Weitere Informationen finden Sie unter Ссылка .

Sie verwenden statische Methoden, wenn die Funktion zugänglich sein soll, ohne dass tatsächlich eine Instanz dieser Klasse deklariert ist.

Bei näherer Betrachtung Ihrer Frage verweist Ihr Link auf Late Static Bindings. Die ersten beiden Beispiele auf dieser Seite zeigen ziemlich deutlich die Notwendigkeit für die static:: -Syntax, aber für das von Ihnen gepostete Beispiel klarzustellen:

Sehen Sie sich die Methode foo() in Klasse A an. Sie ruft static::who() auf. Dies bedeutet, dass die Methode who() im Bereich der Klasse, die die Funktion aufgerufen hat, anstelle des Bereichs der Klasse aufgerufen wird, in der die Funktion definiert ist. Wenn Sie also C::foo() aufrufen würden, würde es C wiedergeben.

Wenn stattdessen self::who() aufgerufen wird, wird A::who() aufgerufen. Weil self:: in Klasse A sich auf A bezieht.

Hoffentlich hilft das.

    
Travesty3 08.05.2012 18:25
quelle
5

Der Schlüssel zur Antwort ist static :: who () , erinnere dich an static :: bedeutet, dass du die Methode mit der eigentlichen Klasse (in unserem Fall - C) anrufst.

also C :: test () wie folgt ausführen:

%Vor%

Wenn anstelle von static :: who () foo das self :: who () anruft, hätten Sie als Ergebnis drei A erhalten.

    
Naama Katiee 08.05.2012 18:53
quelle

Tags und Links