Is it possible to use the __call magic method when calling functions statically?
3 Answers
Not yet, there is a proposed (now available) __callStaticDocs method in the pipeline last I knew. Otherwise __call and the other __ magic methods are not available for use by anything but the instance of a object.
Comments
You have to use the other magic method, __callStatic - this is only available in PHP >= 5.3, which hasn't actually been released yet.
4 Comments
David
Import to note that's not available yet.
nickf
Ah bugger - I was wondering about this, and started to write the question... then I found __callStatic but didn't realise it won't be available until php 5.3
David
I haven't been as excited for a "minor" release in PHP since...Yeah PHP5.3 gives me hope for the language.
Jonathan
I know this is an old question, but I would just like to point out that __callStatic is available >= 5.3 (Not > 5.3) Not sure if anyone else was confused by that, but I was.
As described before, there is no magic static caller. But you can code like this:
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"));