Вызов функции из класса. Не работают ReflectionMethod и call_user_func

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
terrarium volition
Сообщения: 93
Зарегистрирован: 2021.07.15, 21:22

Вызов функции из класса. Не работают ReflectionMethod и call_user_func

Сообщение terrarium volition »

Всем доброго дня!

Возникла следующая ситуация:
Есть класс:

Код: Выделить всё

class Databases extends Migration
{
    public function createDB($dbname){
        Yii::$app->db->createCommand("CREATE DATABASE IF NOT EXISTS $dbname")->execute();
    }
 }
Пытаюсь вызвать его метод createDB так:

Код: Выделить всё

$name = 'Testname';
$reflectionMethod = new ReflectionMethod('Databases', 'createDB');
$status = $reflectionMethod->invoke(new Databases(), $name);
и так:

Код: Выделить всё

call_user_func(array('Databases', 'createDB'), $name);
call_user_func('Databases' .'::createDB', $name);
Итог один: метод контроллера, из которого я его вызываю, нормально не завершается, и, соответственно, не происходит render страницы - просто пустой экран и всё.
В debug панели никаких ошибок не видать.
При этом, если я делаю:

Код: Выделить всё

$db = new Databases();
$iscreated = $db->createDB($name);
То работает без проблем.
Что я делаю не так, товарищи? :o
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Вызов функции из класса. Не работают ReflectionMethod и call_user_func

Сообщение ElisDN »

terrarium volition писал(а): 2022.05.20, 03:53 Что я делаю не так, товарищи? :o
Пытаетесь динамический метод вызывать статически.

Сначала как-нибудь создайте объект:

Код: Выделить всё

$databases = new Databases();

// или

$class = 'Databases';
$databases = new $class();
И уже у него вызывайте метод:

Код: Выделить всё

$databases->createDB($name);

// или

$reflectionMethod = new ReflectionMethod($databases, 'createDB');
$reflectionMethod->invoke('createDB', $name);

// или

call_user_func([$databases, 'createDB'], $name);
Но вообще миграции в Yii пишут немного по-другому.
terrarium volition
Сообщения: 93
Зарегистрирован: 2021.07.15, 21:22

Re: Вызов функции из класса. Не работают ReflectionMethod и call_user_func

Сообщение terrarium volition »

ElisDN писал(а): 2022.05.22, 10:00
terrarium volition писал(а): 2022.05.20, 03:53 Что я делаю не так, товарищи? :o
Пытаетесь динамический метод вызывать статически.

Сначала как-нибудь создайте объект:

Код: Выделить всё

$databases = new Databases();

// или

$class = 'Databases';
$databases = new $class();
И уже у него вызывайте метод:

Код: Выделить всё

$databases->createDB($name);

// или

$reflectionMethod = new ReflectionMethod($databases, 'createDB');
$reflectionMethod->invoke('createDB', $name);

// или

call_user_func([$databases, 'createDB'], $name);
Но вообще миграции в Yii пишут немного по-другому.
Дмитрий, Спасибо Вам огромное!
Ответить