1

PHP 5.2.6 を使用して、レガシー コードベースのプロジェクトに取り組んでいます。このプロジェクトの一部には、ある PHP クラスと別の PHP クラスを使用した A/B テストに似たものが含まれます。この 2 つのクラスには、多くの同じ関数名があり、署名は非常に似ていますが、メソッド内のアプローチが異なります。動的/変数ベースのクラス名を使用して、クラス内で静的メソッドを呼び出すことができるかどうか疑問に思っています。

たとえば、クラス名を次のように設定したい場合:

$class = isset($some_condition) && $some_condition ? 'NewClassName' : 'LegacyClassName';

...そして、関数を次のように呼び出します。

$class::myStaticFunction();

これは call_user_func() で達成できることは承知していますが、別のアプローチを見つけるのに苦労しています (もしあれば)。従来のクラスへのすべての呼び出しを call_user_func() ステートメントで正規表現に置き換えたくありません。

例えば、

$stuff = call_user_func($class . '::myStaticFunction()'); 

...うまくいきます。

PHP 5.2 で $dynamicClassName::staticFunction() を表現するもっと簡単な方法があるかどうかは誰にもわかりませんか? おそらく、構文などで何かが欠けています。

4

1 に答える 1

5

PHP のバージョンをアップグレードできます。5.3以降、関数を呼び出したい方法で使用できます。

5.2 では他に方法はありません。

あなたはこの文章を使うことができます、おそらくもっと読みやすいでしょう:

$stuff = call_user_func_array(array($class, $method), array($arg1, $arg2));
于 2014-07-01T22:09:13.980 に答える