0

同じ静的メソッドを持つ 2 つのクラスがありますが、各クラスのメソッドの実装は異なります。私のコードでは、どの静的メソッドを呼び出す必要があるかはわかっていますが、クラスの型は動的に決定されます。このようなもの:

class someClass_A {
    public static function bar(){
        //some implementation;
    }
    public static function foo(){
        //some implementation;
    }
}

class someClass_B {
     public static function bar(){
        //different implementation;
    }
    public static function foo(){
        //different implementation;
    }
}

私はこの方法で使用しようとしています:

$class = 'someClass_' . $indicator;
$bar = $class::bar();

しかし、それは機能していません。クラス名を動的に作成し、それを使用してそのクラスの静的関数を呼び出すことはできますか?

4

1 に答える 1

0

これにはcall_user_func_arrayを使用できます。

class someClass_A {
    public static function bar() {
        return "I am the A-bar";
    }
    public static function foo() {
        return "I am the A-foo";
    }
}

class someClass_B {
    public static function bar() {
        return "I am the B-bar";
    }
    public static function foo() {
        return "I am the B-foo";
    }
}

$indicator = 'A';
$class = 'someClass_' . $indicator;
$aBar = call_user_func_array(array($class, 'bar'), array());

$indicator = 'B';
$class = 'someClass_' . $indicator;
$bFoo = call_user_func_array(array($class, 'foo'), array());

echo $aBar, PHP_EOL;
echo $bFoo, PHP_EOL;

出力:

I am the A-bar
I am the B-foo

アップデート

もう一度、あなたのコード...

$class = 'someClass_' . $indicator;
$aBar = $class::bar();

...実際にも機能するはずです。$indicator呼び出す前に変数を設定することを忘れないでください:

$indicator = 'A';
$class = 'someClass_' . $indicator;
$aBar = $class::bar();
echo $aBar, PHP_EOL;

出力:

I am the A-bar
于 2015-02-21T08:43:15.840 に答える