2

通常、私はしなければならないでしょう:

$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

おそらく1行でこれを単純化する方法はありますか?希望的観測?

$str::run()

もちろん、$strが実際にオブジェクトの名前であることを確認するのは私の責任です。しかし、それを管理することは、上記のような巨大なリストを管理するよりもはるかに簡単です。

これは可能ですか?

4

2 に答える 2

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!
于 2012-07-15T06:50:08.613 に答える
1

あなたは次のようなことをすることができます:

if (class_exists($str) && method_exists($str,'run')){
  {$tr}::run();
}
于 2012-07-15T06:53:50.323 に答える