Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Рекурсия функции __get()

Сообщения:  [1-6] 

 
 автор: mastep   (26.04.2007 в 13:33)   письмо автору
 
   для: mastep   (26.04.2007 в 13:29)
 

вот код:


<?

$xml_text=<<<XML
<?xml version="1.0" encoding="iso-8859-1" ?>
<ORDERS>
<Customer>Customer1</Customer>
<Nods><Node1>Nfffff</Node1>
<Node2>Node2 text</Node2>
</Nods>

<Nodf><Node1>yyyyyyyy</Node1>
<Node2>yyyyyyyy</Node2>
</Nodf>



</ORDERS>
XML;


//****************************************




class xml_pars
{
var $root;
var $dom;


function load($xml_text)
{

if (!$this->dom = domxml_open_mem($xml_text))
{
echo "Ошибка обработки XML<br>";
exit;
}

$dom=$this->dom;
$this->root= $dom->document_element();

}


function __get($key, &$value) //выводит данные
{
global $xml_text;

$this->load($xml_text);


$root=$this->root;
$dom=$this->dom;

if($nodes=$this->root->get_elements_by_tagname("$key"))
{
$nodez=$nodes[0];
if($nodez!="")
{

$n_chil=$nodez->child_nodes();
foreach($n_chil as $dz)
{

if(1==$dz->type)
{
$this->go="roza";

$oo=new xml_pars();
$value=$oo;
return true;

}
if($dz->node_type()==3)
{
$value=$dz->content;
return true;

}

}

}
else
{
return false;
}
}

}


}




//******************************************


overload('xml_pars');
$oo=new xml_pars();

$oo->load($xml_text);
echo $oo->Nodf->Node2;
?>

   
 
 автор: mastep   (26.04.2007 в 13:29)   письмо автору
 
   для: cheops   (26.04.2007 в 13:20)
 

Я сделал... если долго мучится->получится

короче суть такая

у нас есть :
echo "$oo->Nods->Node1";

функция get берет первый аргумент Nods, а возвращает $oo и ссылается опять на себя (рекурсия), т.е $oo->Nods=$oo

при ссылки саму на себя следующий аргумент Node1

вот так.
если будут нужны примеры скопирую.

   
 
 автор: cheops   (26.04.2007 в 13:20)   письмо автору
 
   для: mastep   (25.04.2007 в 10:25)
 

Тут через __get() вряд ли получится, нужно создавать объект Nods или динамически формировать его в __get() и возвращать.

   
 
 автор: mastep   (25.04.2007 в 10:25)   письмо автору
 
   для: cheops   (25.04.2007 в 00:59)
 

Да вложенность может быть произвольной.

Как сделать вывод допусти одного проблем нет:

$oo->Customer;

а вот, чтобы так:

$oo->Nods->Node1;

проблемы есть с передачей аргумента Node1 функции __get()

   
 
 автор: cheops   (25.04.2007 в 00:59)   письмо автору
 
   для: mastep   (24.04.2007 в 15:57)
 

У вас поля XML-файла могут иметь произвольную степень вложненности? В любом случае вы можете формировать динамические объекты.

   
 
 автор: mastep   (24.04.2007 в 15:57)   письмо автору
 
 

Ребят задача стоит так:

есть XML:

$xml_text=<<<XML
<?xml version="1.0" encoding="iso-8859-1" ?>
<ORDERS>
<Customer>Customer1</Customer>
<Nods>
<Node1>Node1 text</Node1>
<Node2>Node2 text</Node2>
</Nods>
</ORDERS>
XML;


есть класс

class xml_pars
{
есть функция:

function __get($key)
{

}
}

как сделать так, чтобы при написании

overload('xml_pars');
$oo=new xml_pars();

echo "$oo->Nods->Node1";

выдавался текст нода Node1, т.е "Node1 text."

Делается говорят это с помощью рекурсии, но чего то не могу понять как.

   

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования