Допустим, у меня есть класс с именем «переводы».
У меня есть экземпляр класса под названием «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
$part1.$part2
это строка Следовательно, $instance_of_translations
это имя переменной, а не сама переменная.
Попробуй это:
$part1 = 'chinese_';
$part2 = 'translations';
$varName = $part1.$part2;
$instance_of_translations = $$varName;
var_dump($instance_of_translations);
Это должно показать объект типа translations
,
Узнайте больше о переменные переменные.
попробуй это:
$className = $part1.$part2;
$instance = new $$className;
$instance->getMsg();
Наконец, версия с брекетами сделала свое дело, но возникла проблема с областью, так что оба ответа могут быть правильными. Вот этот:
$part1 = 'chinese_';
$part2 = 'translations';
$instance_of_translations = ${$part1.$part2};
$instance_of_translations->getMsg();
В настоящее время работает на меня.