Neuigkeiten:

still alive...

Hauptmenü

Class Basics

Begonnen von Powie, 11. Januar 2006, 22:01:17

Vorheriges Thema - Nächstes Thema

Powie

Manchmal ... da hilft auch das Manual irgendwie nicht so recht weiter.
Auf das unten stehende Beispiel hin verstehe ich 2 Sachen absolut nicht:
A::foo();
B::bar();
 

foo();
A::foo();
$b = new B();
$b->bar();
B::bar();
?>  

 
 
The above example will output:

$this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.
[/quote]

Powie

ok ok ok.....
Paamayim Nekudotayim ..................  :gaga:
aber zumindest scheint mein Hirn einen Teil davon verstanden zu haben  :=(

traumatic

Aehem in C++ ist
::
Der Scope-Operator
Bin mir nicht sicher, aber wird mit A::foo();
nicht versucht, die Methode foo() aus der Klasse A aufzurufen
und mit B::bar(); indirekt die Methode foo() aus Klasse A ...
und da gibbet halt mit dem $this probleme...
(waere in C++ nicht so ohne weiteres moeglich...)
 
Gruss
Ingo

gruss


Traumatic


http://www.mp3-artists.de/cgi-bin/links/jump.cgi?ID=278\" rel=\"external nofollow\">Traumatic Electronic Music


Es gibt Tage, da verliert man - und es gibt Tage, da gewinnen die anderen....


(der Fehler liegt fast immer zwischen den Ohren) /uploads/emoticons/icon_e_smile.gif.f7ec63a2b1c3d90a9415e40455642502.gif\" alt=\":-)\">





( o o )


========oOOo-(_)-oOOo=========


=http://www.mp3-artists.de/cgi-bin/links/jump.cgi?ID=278\" rel=\"external nofollow\">Traumatic Electronic Music=


===============Oooo=========





Powie

jepp genau .. so hab ichs jetzt gelernt. Es war mir nur von Delphi her oder auch von meinen C Exkursionen her vollkommen neu....

milindur

:: wird normalerweise verwendet, um Klassen-Member anzusprechen, also statische Methoden, Konstanten usw.
Interessant dabei ist, dass in diesen Fällen keine Instanz der Klasse existieren muss. Daher dürfen solche statischen Methoden aber auch keine Instanz-Member ansprechen, da diese gar nicht existieren. Insofern sollte innerhalb statischer Methoden auch sowas wie $this gar nicht existieren, da keine Instanz vorhanden ist (und selbst wenn eine Instanz existiert, hat man darauf keinen Zugriff, da die Methode via :: über den Klassennamen und nicht über eine Objektvariable aufgerufen wird bzw. werden kann).
Hilfreich ist dieses Vorgehen z.B., wenn man Hilfsmethoden zur Verfügung stellen oder eine Reihe von \"klassischen Prozeduren/Funktionen\" zusammenfassen möchte.
Was ich an obigem Beispiel nun etwas verwirrend finde ist, dass der Aufruf $b->bar(); zeigt, dass $this vorhanden ist. Nach meinem OO-Verständnis dürfte innerhalb von A::foo $this in jedem Fall nicht bekannt sein, da foo als Klassenmethode aufgerufen wurde.
Ah, ich habe es im Manual gefunden:
Note:  The $this pseudo-variable is not usually defined if the method in which it is hosted is called statically. This is not, however, a strict rule: $this is defined if a method is called statically from within another object. In this case, the value of $this is that of the calling object.[/quote]
Insofern sollte man sich dennoch folgende Regel merken: Methoden, die man als Klassenmethoden verwenden (Klasse::Methode()) möchte (also statische Methoden, in PHP5 z.B. mit \"public static function\" eingeleitet), sollten niemals auf $this zugreifen.

...


all your base are belong to us / Discord