tags:

views:

272

answers:

3

Is it possible to use the __call magic method when calling functions statically?

+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
Import to note that's not available yet.
David
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
I haven't been as excited for a "minor" release in PHP since...Yeah PHP5.3 gives me hope for the language.
David
+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
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