【发布时间】:2009-01-27 02:42:09
【问题描述】:
静态调用函数时可以使用__call魔术方法吗?
【问题讨论】:
标签: php oop static magic-methods
静态调用函数时可以使用__call魔术方法吗?
【问题讨论】:
标签: php oop static magic-methods
还没有,据我所知,管道中有一个提议的(现在可用的)__callStaticDocs 方法。否则,__call 和其他 __ 魔术方法只能由对象实例使用。
【讨论】:
您必须使用 other 魔术方法,__callStatic - 这仅适用于 PHP >= 5.3,尚未真正发布。
【讨论】:
如前所述,没有神奇的静态调用者。但是你可以这样编码:
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"));
【讨论】: