簡體   English   中英

我可以動態創建一個類名,然后用它在PHP中調用該類的靜態函數嗎?

[英]Can I dynamically create a class name and then use it to call static function of that class in PHP?

我有兩個具有相同靜態方法的類,但每個類都有不同的方法實現。 在我的代碼中,我知道我需要調用哪個靜態方法,但是類型是動態確定的。 像這樣的東西:

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();

但它不起作用。 我可以動態創建一個類名,然后用它來調用該類的靜態函數嗎?

您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM