Ist es möglich, die magische Methode __call
zu verwenden, wenn Funktionen statisch aufgerufen werden?Verwenden von __call mit statischen Klassen?
7
A
Antwort
15
Noch nicht, es gibt eine vorgeschlagene (jetzt verfügbar) __callStatic
Docs Methode in der Pipeline zuletzt wusste ich. Ansonsten sind __call
und die anderen __
magischen Methoden für nichts anderes als die Instanz eines Objekts verfügbar.
8
Sie müssen die andere magische Methode verwenden, __callStatic
- dies ist nur in PHP> = 5.3, die noch nicht freigegeben worden ist.
0
Wie zuvor beschrieben, gibt es keinen magischen statischen Aufrufer. Aber Sie können wie folgt codieren:
class First {
public static function test1(){
return 1;
}
public static function test2(){
return 2;
}
}
class Second {
public static function test1(){
if(func_num_args()>0){
return func_get_args();
}
return 21;
}
public static function test2(){
return 22;
}
}
class StaticFactory {
public static function factory($class, $method){
if(func_num_args()>2){
$args = func_get_args();
array_shift($args);
array_shift($args);
return call_user_func_array(array($class,$method), $args);
}else{
return call_user_func_array(array($class,$method), array());
}
}
}
print_r(StaticFactory::factory("Second", "test1", 1, false, true));
print_r(StaticFactory::factory("First", "test1"));
Import zu beachten, dass noch nicht verfügbar ist. – David
Ah bugger - Ich habe mich gefragt, und fing an, die Frage zu schreiben ... dann fand ich __callStatic, aber ich wusste nicht, dass es nicht verfügbar sein wird bis php 5.3 – nickf
Ich war nicht so aufgeregt für eine "kleine" Veröffentlichung in PHP seit ... Yeah PHP5.3 gibt mir Hoffnung für die Sprache. – David