4

静的メソッドを使用する必要がある状況にありますが、ここではクラス名が変数に格納されています。

このリンクのとおり: http://php.net/manual/en/keyword.paamayim-nekudotayim.php#50310で変数を使用できません::

参考までに、私のコードは以下のようになり、このために Yii2 を使用しています。

$modelName = "User";

$query = $modelName::find();

明らかにそれは私にエラーを与えています.私が与えたリンクは今から10歳なので、この状況に代わるものがあるかどうかを確認したかっただけです.

アップデート:

$query = AdminUser::find(); // Works Fine

$name = 'AdminUser';
$query = call_user_func("$name::find");
// Giving Below Error
call_user_func() expects parameter 1 to be a valid callback, class 'AdminUser' not found
4

1 に答える 1

2

名前空間を含むクラス名を指定する必要があります。それについてのphpドキュメントを参照してください。したがって、呼び出しは次のようになります。

$name = __NAMESPACE__ . '\AdminUser';
$query = call_user_func("$name::find");

__NAMESPACE__定数は現在の名前空間を返すことに注意してください。したがって、AdminUserクラスが異なる名前空間に属している場合は、それを指定する必要があります。例えば:

//your current namespace:
namespace app\controllers;
//and somewhere in your method:
$name = 'common\models\AdminUser';
$query = call_user_func("$name::find");
于 2015-08-18T06:48:40.860 に答える