7

__call関数を静的に呼び出すときにマジックメソッドを使用することは可能ですか?

4

3 に答える 3

15

まだ、私が最後に知っていたパイプラインに提案された (現在利用可能な) __callStaticDocsメソッドがあります。それ以外の場合__call、他の__魔法のメソッドは、オブジェクトのインスタンス以外では使用できません。

于 2009-01-27T02:43:44.673 に答える
9

もう 1 つの魔法の方法を使用する必要が__callStaticあります。これは、実際にはまだリリースされていない PHP >= 5.3 でのみ使用できます。

于 2009-01-27T02:43:37.280 に答える
0

前に説明したように、魔法の静的な呼び出し元はありません。ただし、次のようにコーディングできます。

   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"));
于 2009-03-28T23:44:54.543 に答える