Проблема с вызовом переменной в классе

AmadMike

Новичок
Проблема с вызовом переменной в классе

Добрый день.
Проблема заключается в следующем: имеется класс, в нем есть массив _tpldata.
Вот так все работает без проблем:
PHP:
<?php
$str = '_tpldata';
print_r($this->$str);
?>
А если хочу таким же образом обратиться к какому-нибудь элементу массива _tpldata, например:
PHP:
<?php
$str = '_tpldata[0]';
print_r($this->$str);
?>
Выводится такое сообщение:
Notice: Undefined property: Template::$_tpldata[0] in D:\root\class\include\template.php on line 107
Как можно обойти данную проблему (не используя eval).
 

uliss

Новичок
Если только вот так:
PHP:
//
$str = '_tpldata';
echo $this->{$str}[0];
//
 

AmadMike

Новичок
Ну так работает, просто проблема в том, что последний ноль еще можно таким образом написать, а еще нужно неопределенное чилсло индексов до этого написать, а такой вариант не прокатывает.
Поэтому приходится делать что-то типа такого:
PHP:
$str = '$this->_tpldata[\'...\'][\'...\'][0]';
eval ( "\$data = $str;" );
А хотелось бы не перекидовать большой массив в отдельную переменную.
 

SelenIT

IT-лунатик :)
А эти имена с индексами неизвестной размерности необходимо передавать непременно в виде строк? Другие варианты не рассматриваются?
 

AmadMike

Новичок
А есть другой вариант?
На самом деле это класс template, у ребят из phpBB все делается именно так, только у них вообще все компилирование кода записывается переменную, а потом обрабатывается через eval.
У нас есть имя блока, причем блоки могут быть вложены один в один сколько угодно раз, для того чтобы обратиться к блоку пишем его "абсолютный путь" block1.block2.block3 и т.д. Все это предварительно набирается в массив с переменными _tpldata, где блок 3 лежит так - _tpldata['block1.'][#]['block2.'][#]['block3']. Переменная одна и глобальная, и каждый раз разбирая блок надо изымать данные именно из нее. Самый простой вариант - это забить все это в строку, а потом вызывать во всех следующих циклах как $this->$str, но видимо таким образом это сделать невозможно.
 

SelenIT

IT-лунатик :)
Чем же этот вариант самый простой? Чем он проще вложенного цикла foreach, например?
 

AmadMike

Новичок
Всмысле вложенный цикл?
В классе есть функция, которая редактирует выбранный блок, она запускается на все тело шаблона, а потом находя каждый новый блок, она вырезает его и посылает в саму себя с указанием названия родительского блока. Блоки выглядят так:
Array
(
[0] => Array
(
[VAR1] => var1
[VAR2] => var2
[block1.] => Array
(
[0] => Array
(
[VAR1] => var1
[VAR2] => var2
[block2.] => Array
(
[0] => Array
(
[VAR1] => var1
[VAR2] => var2

)

)

)

[1] => Array
(
[VAR1] => var1
[VAR2] => var2
)

)

)

)
Ну и так далее, и вот нам скажем надо перебрать block2.
Вызывам 'block1.block2' разбиваем его на куски и обозначаем путь для цикла - $this->tpldata['block1.'][0]['block2.'][0][$key] = $val. А так каждый раз перебирать весь массив и искать нужный элемент чтоли?
 
Сверху