|
|
|
| Здравствуйте.
есть метод в классе:
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']);
}
}
|
Теоритически должен вывести дерево каталогов (рекурсия), на практике выводит только одну "ветвь". Переписав пример без ооп, все работает. В чем касяк не пойму. | |
|
|
|
|
|
|
|
для: Razputin
(04.09.2008 в 00:19)
| | Проблема в том, что Вы перезаписываете дескриптор в $this->q. Родительский цикл еще не вывел весь список, как $this->q стал содержать дескриптор какого-то другого запроса. | |
|
|
|
|
|
|
|
для: 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 не перезаписывается? | |
|
|
|
|
|
|
|
для: Razputin
(04.09.2008 в 00:38)
| | Потому что просто $q без объявления как global/static находится в области видимости только конкретной подпрограммы. Имена у них хоть и одинаковое, но внутренние адреса разные... | |
|
|
|
|
|
|
|
для: BinLaden
(04.09.2008 в 00:41)
| | И как в таком случае поступать? Нужно чтоб работал первый пример. | |
|
|
|
|
|
|
|
для: Razputin
(04.09.2008 в 00:43)
| | Наврядли что-то неверное где-то нужно. | |
|
|
|
|
|
|
|
для: BinLaden
(04.09.2008 в 00:55)
| | Исчерпывающе :0) спасибо... буду пробовать варианты. | |
|
|
|