通常情况下,我必须这样做:
$str = "classname"; //classname is the name of a class
switch($str)
{
case "class1":
class1::run(); break;
case "class2":
class2::run(); break;
case "class3":
class3::run(); break;
case "class4":
class4::run(); break;
case "classname":
classname::run(); break;
default:
die("Fatal error: no such class");
}
//in my case, there are hundreds of cases and more being added
有没有办法简化这个,也许在一行?一厢情愿?
$str::run()
当然,我有责任确保$ str实际上是对象的名称。但管理这比管理如上所述的巨大列表要容易得多。
这可能吗?
答案 0 :(得分:3)
是;正如你猜测的那样,$str::run();
有效。
php> class A { public static function run() { echo "A!"; } }
php> class B { public static function run() { echo "B!"; } }
php> $n = "A";
php> $n::run();
A!
php> $n = "B";
php> $n::run();
B!
答案 1 :(得分:1)
if (class_exists($str) && method_exists($str,'run')){
{$tr}::run();
}