Is it possible to use the __call
magic method when calling functions statically?
views:
272answers:
3
+1
A:
You have to use the other magic method, __callStatic
- this is only available in PHP > 5.3, which hasn't actually been released yet.
nickf
2009-01-27 02:43:37
Import to note that's not available yet.
David
2009-01-27 02:45:09
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
nickf
2009-01-27 02:48:27
I haven't been as excited for a "minor" release in PHP since...Yeah PHP5.3 gives me hope for the language.
David
2009-01-27 17:55:31
+5
A:
Not yet, there is a proposed __callStatic 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.
David
2009-01-27 02:43:44
A:
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"));
Tom Schaefer
2009-03-28 23:44:54