Столкнулся с такой задачей: Есть код Код (Text): <?php class TTag { function TTag($tag_name,$tag_content) { $this->tag_name = $tag_name; $this->tag_content = $tag_content; } } $item = array( new TTag('span','{label1}'), new TTag('a','link1')); $items = array($item,$item,$item,$item); ?> теперь если сделать следующее присвоение Код (Text): <?php $items[1][1]->href = 'text1.data'; print_r($items); ?> то результатом будет нечто следующее Код (Text): Array ( [0] => Array ( [0] => TTag Object ( [tag_name] => span [tag_content] => {label1} ) [1] => TTag Object ( [tag_name] => a [tag_content] => link1 [href] => text1.data ) ) [1] => Array ( [0] => TTag Object ( [tag_name] => span [tag_content] => {label1} ) [1] => TTag Object ( [tag_name] => a [tag_content] => link1 [href] => text1.data ) ) [2] => Array ( [0] => TTag Object ( [tag_name] => span [tag_content] => {label1} ) [1] => TTag Object ( [tag_name] => a [tag_content] => link1 [href] => text1.data ) ) [3] => Array ( [0] => TTag Object ( [tag_name] => span [tag_content] => {label1} ) [1] => TTag Object ( [tag_name] => a [tag_content] => link1 [href] => text1.data ) ) ) Как видно, каждый элемент начального массива во втором тэге стал иметь ''href = text1.data". По всей видимости это связано с тем как происходит присвоение объекта значению массива. Возник вопрос, как можно это обойти наиболее просто.
каждый элемент начального массива это один и тот же объект. естественно, что свойства этого объекта одинаковы во всех ссылках на него. начиная, кажется, с PHP 4 присвоение объекта это копирование ссылки, а не создание нового экземпляра.
kadet - у вас какая версия php? 5.x.x.? Если да, то почему читаете документацию по php 4? В пятой версии значительно переработали работу с объектами и классами
PHP Version 5.3.13 /почему читаете документацию по php 4/ не понял вопроса. Проблема-то всё равно остаётся. Вообщето есть способ её обойти, создавать для каждого элемента отдельный объект, но это не очень эффективно на мой взгляд.
У вас, по сути, два варианта: 1. количество объектов равно количеству тэгов 2. один объект, содержащий массив всех тэгов
Так делать нет необходимости. Я придумал вообще новую систему: Код (PHP): %theme uses="theme"% (text value="Какой-то текст...") <new_tag uses="new_tag"> И конструкцию сделал тоже) Код (PHP): <if name_block></if> Где: value-это обычной текст uses-реализованная переменная для этого тега Пример: Вывод: Код (PHP): <p> (text) </p> <if theme> <div> %theme% </div> </if> <div> <new_tag> </div> Ну вы с этим не парьтесь, это я так для виду... Там очень большой проект будет) И закончить его не хватает времени, на свои идеи), работа же еще... Лучше будет регуляркой и массивом сделать, а не объектами.