Variable Aufrufe statischer Methoden

Ich war gerade dabei, ein wunderschoenes Konzept zu implementieren, das
u.a. darauf aufbaut, variable statische Methoden variabler Klassen
aufzurufen, also in etwa so:

$result = $class::$method;

Ging dummerweise nicht. Nach einigem Herumprobieren verriet mir dann das
Manual: "as of PHP 5.3.0, it's possible to reference the class using a
variable". Fein, allerdings habe ich hier nur PHP 5.2, das klappt also
nicht.

Faellt jemandem ein praktikabler Workaround ein? (Alle denkbaren Werte
von $class in einem switch() abzufragen, kommt leider nicht in Frage)

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Geht nicht!? Gibt's nicht! Stefan.
(Sloganizer)
Stefan+Usenet [ Do, 29 November 2007 22:55 ] [ ID #1882019 ]

Re: Variable Aufrufe statischer Methoden

..oO(Stefan Froehlich)

>Ich war gerade dabei, ein wunderschoenes Konzept zu implementieren, das
>u.a. darauf aufbaut, variable statische Methoden variabler Klassen
>aufzurufen, also in etwa so:
>
>$result = $class::$method;
>
>Ging dummerweise nicht. Nach einigem Herumprobieren verriet mir dann das
>Manual: "as of PHP 5.3.0, it's possible to reference the class using a
>variable". Fein, allerdings habe ich hier nur PHP 5.2, das klappt also
>nicht.
>
>Faellt jemandem ein praktikabler Workaround ein? (Alle denkbaren Werte
>von $class in einem switch() abzufragen, kommt leider nicht in Frage)

Was sagt denn call_user_func()?

Micha
Michael Fesser [ Do, 29 November 2007 22:58 ] [ ID #1882021 ]

Re: Variable Aufrufe statischer Methoden

On Thu, 29 Nov 2007 22:58:29 +0100 Michael Fesser wrote:
> >$result = $class::$method;

> >Faellt jemandem ein praktikabler Workaround ein?

> Was sagt denn call_user_func()?

Ah, das gute liegt manchmal so nah. Ich war zu sehr auf Objekte
fixiert, danke.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Die erhabene Idee, oder warum Stefan so edel rattert!
(Sloganizer)
Stefan+Usenet [ Do, 29 November 2007 23:36 ] [ ID #1882024 ]

Re: Variable Aufrufe statischer Methoden

Stefan Froehlich wrote:
>>> $result = $class::$method;
>>> Faellt jemandem ein praktikabler Workaround ein?
>
>> Was sagt denn call_user_func()?
>
> Ah, das gute liegt manchmal so nah. Ich war zu sehr auf Objekte
> fixiert, danke.

Dann hättest Du aber über Reflection stolpern müßen! :-)
Den würde ich hier sowieso den Vorzug geben. Es ist schneller.

Aber halt jeder nach seinen Vorlieben...

MfG, Ulf

--
_,
_(_p> Ulf [Kado] Kadner
\<_)
^^
Ulf Kadner [ Fr, 30 November 2007 14:42 ] [ ID #1883059 ]

Re: Variable Aufrufe statischer Methoden

On Fri, 30 Nov 2007 14:42:14 +0100 Ulf Kadner wrote:
> >>> $result = $class::$method;

> Dann hättest Du aber über Reflection stolpern müßen! :-)
> Den würde ich hier sowieso den Vorzug geben. Es ist schneller.

Was das betrifft, grueble ich noch immer darueber nach, wie
und wofuer ich es genau brauchen moechte :-). Irgendwie fehlt
mir da noch der geistige Zugang dafuer, aber vielleicht ist
das ja jetzt die Chance, wo es ein konkretes Beispiel gibt.
Wie wuerde man obiges Statement - elegant und schnell - mit
Reflection nachbilden?

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich

Der Traum vom kleinen Glück! Stefan - Glaube und Teste!
(Sloganizer)
Stefan+Usenet [ Fr, 30 November 2007 18:00 ] [ ID #1883070 ]

Re: Variable Aufrufe statischer Methoden

Stefan Froehlich schrieb:
> On Fri, 30 Nov 2007 14:42:14 +0100 Ulf Kadner wrote:
>>>>> $result = $class::$method;

>> Dann hättest Du aber über Reflection stolpern müßen! :-)
>> Den würde ich hier sowieso den Vorzug geben. Es ist schneller.

> Was das betrifft, grueble ich noch immer darueber nach, wie
> und wofuer ich es genau brauchen moechte :-). Irgendwie fehlt
> mir da noch der geistige Zugang dafuer, aber vielleicht ist
> das ja jetzt die Chance, wo es ein konkretes Beispiel gibt.
> Wie wuerde man obiges Statement - elegant und schnell - mit
> Reflection nachbilden?

$ref = new ReflectionClass($class);

if($ref->hasMethod($method)) {
$ref->getMethod($method)->invoke();
}

<http://de2.php.net/oop5.reflection>

--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ Fr, 30 November 2007 19:22 ] [ ID #1883071 ]

Re: Variable Aufrufe statischer Methoden

Also sprach Thomas Hamacher:

> $ref = new ReflectionClass($class);
>
> if($ref->hasMethod($method)) {
> $ref->getMethod($method)->invoke();
> }

Und das soll tatsächlich schneller sein als call_user_func( array( $class,
$method ) )?

Zweifelnd,
Thomas

--
C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!
(Coluche)
Thomas Mlynarczyk [ Fr, 30 November 2007 21:43 ] [ ID #1883076 ]

Re: Variable Aufrufe statischer Methoden

Thomas Mlynarczyk schrieb:
> Also sprach Thomas Hamacher:
>
>> $ref = new ReflectionClass($class);
>>
>> if($ref->hasMethod($method)) {
>> $ref->getMethod($method)->invoke();

Das hier muss $ref->getMethod($method)->invoke(null); lauten.

>> }

> Und das soll tatsächlich schneller sein als call_user_func( array( $class,
> $method ) )?

Nein, natürlich nicht. Das ist viel langsamer als call_user_func().

--
"Faulheit ist die Wurzel allen Fortschritts!"
(Inhalt eines Knallbonbons, 2002)
dafox [ Fr, 30 November 2007 23:44 ] [ ID #1883079 ]

Re: Variable Aufrufe statischer Methoden

Also sprach Thomas Hamacher:

[Reflection]
>> Und das soll tatsächlich schneller sein als call_user_func( array(
>> $class, $method ) )?

> Nein, natürlich nicht. Das ist viel langsamer als call_user_func().

Ulf meinte aber ein paar Postings weiter oben:
> Dann hättest Du aber über Reflection stolpern müßen!
> Den würde ich hier sowieso den Vorzug geben. Es ist schneller.

Gruß,
Thomas

--
C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!
(Coluche)


Thomas Mlynarczyk [ Sa, 01 Dezember 2007 19:58 ] [ ID #1883682 ]
PHP » de.comp.lang.php.misc » Variable Aufrufe statischer Methoden

Vorheriges Thema: Statische Klassenvariable und Sessions
Nächstes Thema: Zugriffsschutz