[PHP] Klassenname in Variable + Statischer Funktionsaufruf

Bash, Shell, PHP, Python, Perl, CGI
dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

[PHP] Klassenname in Variable + Statischer Funktionsaufruf

Post by dtdesign »

Hallo,

ich habe mal wieder ein etwas dubioses Problem. Ich versuche eine statische Methode einer Klasse aufzurufen, der Klassenname befindet sich allerdings in einer Variable. Merkwürdigerweise erlaubt PHP es mir nicht die Methode aufzurufen, beziehungsweise schlägt mir Parse-Error um die Ohren.

Codeausschnitt:

Code: Select all

<?php
	if($this->application_config[$class_identifier]['details']['spawn'] == 'normal')
	{
		return new $class_identifier; [1]
	}
	else
	{
		return $class_identifier::GetInstance(); [2]
	}
?>
Wie man am Aufruf [1] sieht, dürfen Klassennamen auch in Variablen stehen, das ist auch so gewollt. Jedoch scheitert der andere Aufruf [2] kläglich mit einem Parse-Error. Selbst der Versuch die Variable $class_identifier in geschweifte Klammern zu setzen damit die Variable erst ausgewertet wird, scheitert mit einem weiteren Parse-Error (die Klammern sind dort nicht erlaubt).

Ich kann mir kaum vorstellen, dass dies so richtig ist und ich bin der festen Überzeugung das ich einfach etwas übersehe. Ein Aufruf über eval() oder ähnliches Gefusche schließt sich vollständig aus.

Ich wäre sehr dankbar, wenn mir jemand das Brett vorm Kopf wegnehmen kann ;)

Gruß
dtdesign
dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin

Re: [PHP] Klassenname in Variable + Statischer Funktionsaufruf

Post by dtdesign »

Erledigt. Um einen statischen Methodenaufruf zu erreichen, muss man call_user_func() nutzen.

:arrow: http://bugs.php.net/bug.php?id=33463

Edit:

In meinem Beispiel müsste der Code so lauten:

Code: Select all

<?php
// ...
return call_user_func("{$class_identifier}::GetInstance");
// ...
?>