Statische Klassenmethode
Ben
- php
Hallo zusammen
Wenn ich den Namen der Klasse in einer Variable habe kann ich sie ja z.B. mit
$myClass=new $className();
instanzieren.
Wenn ich jetzt versuche, eine statische Methode einer Klasse über
$myClass::tu_was();
aufzurufen, dass kommt die Meldung "unexpected T_PAAMAYIM_NEKUDOTAYIM".
Kann mir jemand sagen, ob und wie ich das machen muss damit es funktioniert?
Danke und Gruss
Ben
Hi,
Wenn ich den Namen der Klasse in einer Variable habe kann ich sie ja z.B. mit
$myClass=new $className();
instanzieren.Wenn ich jetzt versuche, eine statische Methode einer Klasse über
$myClass::tu_was();
aufzurufen, dass kommt die Meldung "unexpected T_PAAMAYIM_NEKUDOTAYIM".Kann mir jemand sagen, ob und wie ich das machen muss damit es funktioniert?
Statische Methoden werden unter Angabe der Klasse aufgerufen, nicht ueber eine Instanz.
In deinem Beispiel also
$className::tu_was();
MfG ChrisB
Hallo ChrisB
Statische Methoden werden unter Angabe der Klasse aufgerufen, nicht ueber eine Instanz.
In deinem Beispiel also
$className::tu_was();
Ja genau das habe ich ja versucht, ich schrieb ja $myClass:tu_was();. Und in $myClass ist der Klassenname, keine Instanz der Klasse. Aber da kommt eben dann die obengennante Fehlermeldung.
Hast du das bei dir schonmal zum laugen gebracht?
Gruss Ben
Hi,
Statische Methoden werden unter Angabe der Klasse aufgerufen, nicht ueber eine Instanz.
In deinem Beispiel also
$className::tu_was();Ja genau das habe ich ja versucht, ich schrieb ja $myClass:tu_was();. Und in $myClass ist der Klassenname, keine Instanz der Klasse.
Du hattest darueber explizit das Beispiel
$myClass=new $className();
gebracht - und damit enthaelt $myClass eben nicht den Klassennamen als String, sondern eine Instanz der Klasse.
Hast du das bei dir schonmal zum laugen gebracht?
Wenn der Klassenname in einer Variablen stehen soll, scheint's dafuer wohl in PHP-Versionen < 5.3.0 keinen sauberen Weg zu geben - zumindest empfiehlt der dieser Nutzerkommentar auf der Manualseite zu ::, es ueber eval zu machen ...
MfG ChrisB
Hallo ChrisB
Du hattest darueber explizit das Beispiel
$myClass=new $className();
gebracht - und damit enthaelt $myClass eben nicht den Klassennamen als String, sondern eine Instanz der Klasse.
Ich hab's auch bemerkt, nachdem ich meinen Beitrag geschrieben habe, dass in meinem Beispiel ein Fehler drin war (zweite Antwort). Tja, einfach unüberlegt abgeschickt...
Wenn der Klassenname in einer Variablen stehen soll, scheint's dafuer wohl in PHP-Versionen < 5.3.0 keinen sauberen Weg zu geben - zumindest empfiehlt der dieser Nutzerkommentar auf der Manualseite zu ::, es ueber eval zu machen ...
Danke für den Link. Ist ja sehr unschön, dass mit eval zu machen. Aber wenn es keinen anderen Weg gibt...
Komisch finde ich es trotzdem, dass es funktioniert, wenn man eine Klasse instanziert (Bsp.: $myClass=new $className();). Da ist ja auch der Klassenname in einer Variablen. Das muss man wahrscheinlich nicht begreifen... :-)
Gruss Ben
Tach.
Wenn der Klassenname in einer Variablen stehen soll, scheint's dafuer wohl in PHP-Versionen < 5.3.0 keinen sauberen Weg zu geben - zumindest empfiehlt der dieser Nutzerkommentar auf der Manualseite zu ::, es ueber eval zu machen ...
Danke für den Link. Ist ja sehr unschön, dass mit eval zu machen. Aber wenn es keinen anderen Weg gibt...
Doch, den gibt es. Nicht immer sind die Userkommentare auf der Handbuchseite der Weisheit letzter Schluß ...
Hallo Blaubart
Das funktioniert tatsächlich, danke. Sieht zwar etwas kryptisch aus, aber solange es funktioniert...
Danke & Gruss
Ben
Hallo ChrisB
Jetzt weiss ich was du meintest. In meinem Beispiel war ein Fehler drin. Natürlich habe ich es über $className::tu_was(); probiert und nicht über die vorher erstellte Instanz der Klasse...
Trotzdem hat es nicht funktioniert.
Gruss Ben
Tach.
Kann mir jemand sagen, ob und wie ich das machen muss damit es funktioniert?
Das hier benutzen: call_user_func(array($className, "doStuff"));