php вызывает экземпляр класса из динамически генерируемой строки

Допустим, у меня есть класс с именем «переводы».
У меня есть экземпляр класса под названием «Chinese_translations»

$chinese_translations = new translations;

После этого я хочу вызвать этот экземпляр из динамически создаваемой строки, и я попробовал несколько способов:

$part1 = 'chinese_';
$part2 = 'translations';
$instance_of_translations = ${$part1.$part2};
$instance_of_translations->getMsg();//Doesn't work

Также как это:

$part1 = 'chinese_';
$part2 = 'translations';
$instance_of_translations = $part1.$part2;
$$instance_of_translations->getMsg();//Doesn't work

Я всегда получаю сообщение «Вызов функции-члена getMsg () для необъектного объекта».
Что я делаю не так?

* НЕКОТОРЫЕ ДЕЙСТВИЯ И ПОЛУЧЕННЫЕ РЕЗУЛЬТАТЫ:

//Lets see if the var is in scope:

echo $chinese_translations->getMsg(get_locale());//It works

$instance_of_translations = ${$part1.$part2};//Let's try to build the name dynamically

echo $chinese_translations->getMsg(get_locale()); //Call to a member function getMsg() on a non-object

echo $$chinese_translations->getMsg(get_locale()); //Object of class internal_message could not be converted to string in

var_dump($instance_of_translations);//It throws the following:

//object(internal_message)#1956 (1) { ["message"]=> array(2) { ["es_ES"]=> string(19) "The expected result" ["it_IT"]=> string(19) "The expected result" } }NULL

1

Решение

$part1.$part2 это строка Следовательно, $instance_of_translations это имя переменной, а не сама переменная.

Попробуй это:

$part1 = 'chinese_';
$part2 = 'translations';
$varName = $part1.$part2;
$instance_of_translations = $$varName;
var_dump($instance_of_translations);

Это должно показать объект типа translations,

Узнайте больше о переменные переменные.

2

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

попробуй это:

$className = $part1.$part2;
$instance = new $$className;
$instance->getMsg();
1

Наконец, версия с брекетами сделала свое дело, но возникла проблема с областью, так что оба ответа могут быть правильными. Вот этот:

 $part1 = 'chinese_';
$part2 = 'translations';
$instance_of_translations = ${$part1.$part2};
$instance_of_translations->getMsg();

В настоящее время работает на меня.

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