oop — Использование переменной с оператором разрешения области действия в переполнении стека

У меня возникла ситуация, когда я должен использовать статический метод, но здесь имя моего класса хранится в некоторой переменной.

По этой ссылке: 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

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");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]