誰かがPHPで助けてくれた。
$result = myClassName::myFunctionName();
ただし、このようなクラスを多数用意し、ユーザーの言語に応じてその場で正しいクラス名を決定したいと思います。言い換えれば、私は持っています:
$language = 'EN';
...そして、私は次のようなことをする必要があります:
$result = myClassName_EN::myFunctionName();
言語を関数のパラメーターとして渡し、1つの共通クラス内で処理できることは知っていますが、さまざまな理由から、別のソリューションを好むでしょう。
これは理にかなっていますか?ありがとう。
call_user_func 関数を使用します。
http://php.net/manual/en/function.call-user-func.php
例:
call_user_func('myClassName_' . $language . '::myFunctionName');
私はと思うあなたができる:
$classname = 'myClassName_' . $language;
$result = $classname::myFunctionName();
これは 変数関数 と呼ばれます
ファクトリで必要なクラスの作成をカプセル化します。
この方法では、ベース名または言語を適切なクラスにマッピングするためのルールを変更する必要がある場合に、単一のエントリポイントがあります。
class YourClassFactory {
private $_language;
private $_basename = 'yourclass';
public YourClassFactory($language) {
$this->_language = $language;
}
public function getYourClass() {
return $this->_basename . '_' . $this->_language;
}
}
そして、それを使用する必要がある場合:
$yourClass = $yourClassFactoryInstance->getYourClass();
$yourClass::myFunctionName();
Temuriが言ったように、 '$ className :: functionName'を試みると解析エラーが生成されます:
解析エラー:構文エラー、予期しないT_PAAMAYIM_NEKUDOTAYIM ...
私の場合(2つの引数を持つ静的メソッド)、最善の解決策は、 call_user_func_array を2つの配列で使用することです(nikc.orgによって提案されたとおり):
$result = call_user_func_array(array($className, $methodName), array($ard1, $arg2));
BR
あなたの対処方法は非常に悪い考えだと思いますが、解決策があるかもしれません
$className = 'myClassName_'.$language;
$result = $className::myFunctionName();
これがあなたが望むものだと思う
あなたの質問を理解できる限り、 get_class 関数を使用して実行できるクラス名を取得する必要があります。一方、 Reflection class は、OOP wayのメソッド、引数などに関しては素晴らしいことです。
次は簡単にできます:
<?php
class B {
public static $t = 5;
public static function t($h) {
return "Works!" . $h;
}
}
$g = 't';
$class = 'B';
echo $class::$g('yes'); //Works! Yes
そして、PHP 5.2> =
次のようなソリューション:
_$yourClass::myFunctionName();
_
動作しないでしょう。 PHPは解析エラーを生成します。
残念ながら、唯一の方法は非常に遅いcall_user_func()
を使用することです。