• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Variable in Namespaces

Frucht

Mitglied
Hallo,
wie kann ich z.b. Namespaces dynamisch nutzen?

new module\$var2\controller\$var1::$var;


mfg
 
Zuletzt bearbeitet:
PHP:
$method = "module\\$var2\\controller\\$var1::$var";
$method();

Nicht getestet.
Ich find's allerdings merkwürdig, dass du da so viele Variablen drin hast.
 
Reflection?

Ist es nicht sinnvoller die Reflection-Api zu nutzen?

PHP:
$myclassname="name\\$space\\$Klasse";
$mymethodname="methodname";
$reflection=new ReflectionClass($myclassname);
$myobj=$reflection->newInstance($args);
if ($reflection->hasMethod($mymethodname)){
 $mymethod=$reflection->getMethod($mymethodname);
 $mymethod->invoke($myobj,$args)
}
Disclaimer: Ungetestet. Hatte auch in PHP bisher noch Grund keinen Reflection einzusetzen.
 
Zuletzt bearbeitet:
Hab mit der Reflection Api noch nie gearbeitet ....
Reflection ist ein relativ mächtiges Werkzeug.
Ob es in deinem Fall sinnvoll, kommt darauf an, was du machen willst.

Es ist sinnvoll, wenn
du nicht alle aufgerufenen Module selber geschrieben hast,
sich die Spezifikationen (z.B. Namen der Methoden, Anzahl der Methoden oder derren Parameter) im Laufe des Projektes noch ändern können,
oder du vor dem Aufruf prüfen willst, ob die Aktionen überhaupt funktionieren können.
Ich will Module laden und die angeforderte Action ausführen ....
Möglichkeiten gibt es viele. Ganz billig z.B. auch
PHP:
//initialisieren
$myobjects=array("var1"=>new name\\space\\Klasse(),"var2"=>new name\\space2\\Klasse(),...);
...
//die doAction-Methode hat jedes der Objecte, quasi als switch-Statement Ersatz für unterschiedliche Methodennamen
$myobjects[$var]->doAction($actioname);
Hmm, warum tauchen die "\" oben nicht im Namespace auf???
 
OT: Das liegt am vBulletin-Syntaxhighlighting (also, ist in anderen Foren zumindest auch so). [noparse]
Code:
...
[/noparse]-Abschnitte wären eine Alternative.
 
Die Reflection-API ist langsam. Es gibt nur spezielle Anwendungsfälle in denen man diese benutzen sollte. Pures PHP sollte man in jedem Fall den Vorrang geben und für einfache Sachen Methoden wie get_class() und method_exists() benutzen.

Ich will Module laden und die angeforderte Action ausführen ....
Und da brauchst du gleich drei Variablen? Also im Normalfall sollte das so aussehen:
PHP:
$controller = new '\\MyApp\\Controller\\' . ucfirst($controller) . 'Controller';
$actionMethod = $action = 'Action';
$controller->$actionMethod($requestObject);
 
Zurück
Oben