[英]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.