У меня возникла ситуация, когда я должен использовать статический метод, но здесь имя моего класса хранится в некоторой переменной.
По этой ссылке: 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
Вам необходимо указать имя класса, включая пространство имен. Увидеть 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");
Других решений пока нет …