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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Проблема с рекусией
 
 автор: Razputin   (04.09.2008 в 00:19)   письмо автору
 
 

Здравствуйте.

есть метод в классе:


 public function TreeCategory($id) {

    $this->q = mysql_query("SELECT * FROM cms_category WHERE CatParentId='$id' ORDER BY CatPos");

    while($this->cat = mysql_fetch_assoc($this->q)) {
        echo $this->cat['CatName'].'<br>';

        $this->TreeCategory($this->cat['CatId']);
 }

 }


Теоритически должен вывести дерево каталогов (рекурсия), на практике выводит только одну "ветвь". Переписав пример без ооп, все работает. В чем касяк не пойму.

  Ответить  
 
 автор: BinLaden   (04.09.2008 в 00:33)   письмо автору
 
   для: Razputin   (04.09.2008 в 00:19)
 

Проблема в том, что Вы перезаписываете дескриптор в $this->q. Родительский цикл еще не вывел весь список, как $this->q стал содержать дескриптор какого-то другого запроса.

  Ответить  
 
 автор: Razputin   (04.09.2008 в 00:38)   письмо автору
 
   для: BinLaden   (04.09.2008 в 00:33)
 

<?php
function TreeCategory($id) {
    
$q mysql_query("SELECT * FROM cms_category WHERE CatParentId='$id' ORDER BY CatPos");
    while(
$cat mysql_fetch_assoc($q)) {
        echo 
$cat['CatName'].'<br>';
        
TreeCategory($cat['CatId']);
    }
}

TreeCategory(0);
?>


Помоему этот пример ни чем не отличается, от привиденного выше, но тем неменее рабочий. почему тут дескриптор $q не перезаписывается?

  Ответить  
 
 автор: BinLaden   (04.09.2008 в 00:41)   письмо автору
 
   для: Razputin   (04.09.2008 в 00:38)
 

Потому что просто $q без объявления как global/static находится в области видимости только конкретной подпрограммы. Имена у них хоть и одинаковое, но внутренние адреса разные...

  Ответить  
 
 автор: Razputin   (04.09.2008 в 00:43)   письмо автору
 
   для: BinLaden   (04.09.2008 в 00:41)
 

И как в таком случае поступать? Нужно чтоб работал первый пример.

  Ответить  
 
 автор: BinLaden   (04.09.2008 в 00:55)   письмо автору
 
   для: Razputin   (04.09.2008 в 00:43)
 

Наврядли что-то неверное где-то нужно.

  Ответить  
 
 автор: Razputin   (04.09.2008 в 00:59)   письмо автору
 
   для: BinLaden   (04.09.2008 в 00:55)
 

Исчерпывающе :0) спасибо... буду пробовать варианты.

  Ответить  
Rambler's Top100
вверх

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