Autor Zpráva
esfasfdas
Profil *
realna ukazka classy:

class menu{
var $counter = 0;

function generate_html($parrent_id=0,$menu_html=""){
if ((!isset($menu_html))||(!isset($parrent_id))){die("PHP internal error!");}
global $DB;
$menu_html .= "<ul>";
$ra=$DB->getAssoc("nejaky select");
foreach ($ra as $rsa){
$menu_html .= ("<li><a href='#'>".$rsa['name']."</a>");
$this->generate_html($rsa['id'],$menu_html);
$counter++;
echo("<b>");print_r($counter);echo("</b>\n");
$menu_html .= ("</li>");
}
$menu_html .= "</ul>";
echo("<pre>");print_r($menu_html);echo("</pre>");echo("<hr />\n\n");
}
}

jakmile se zavola kvuli rekurzi $this->generate_html je counter vynulovat, tj. vytvori se ocividne nova stejna class, jak to resit pokud nechci pouzit proste samostatnou funkci mimo objekt? Zajima me to samozrejme ze studijnich ucelu :)
bukaj
Profil
esfasfdas
Nepoužívej $counter, ale $this->counter (v případě, že vytváříš instanci pomocí operátoru new), nebo self::$counter (jestliže se jedná o statické volání). Pak se stav počítadla bude uchovávat v instanci, či třídě.
esfasfdas
Profil *
Tak to jsi me neudelal radost, funguje to jak ma, tudiz mam nekde zasadni chybu :((
esfasfdas
Profil *
Jinak je to uplne klasika rekurzivni menu z db, kde je ID, id rodice, jmeno

a nekde mam botu a nemuzu prijit na to kde. Pritom jsem to uz urcite (nekolikrat)vyresil :(
esfasfdas
Profil *
Tak to jsi me neudelal radost, funguje to jak ma, tudiz mam nekde zasadni chybu :((
Teda je mi jasny, ze je to v tom predavani $menu_html, pokud to mlatim do $menu_html , ktery mam definovany pro cely objekt jako $this->menu_html tak je to OK.
bukaj
Profil
esfasfdas
Doporučuji se inspirovat článkem na sitepoinu, či česky na intervalu.
esfasfdas
Profil *
tyjo musim letet, ale doslo mi, ze si vlastne muzu predavat vysledek te funkce co volam asi, tj. jedno, musim letet a potrebuju to ssebou, tak sem to holt udelal pres tu privatni prommenou v te class :( - neni to sice uplne dokonale, ale asi s tim dokazu zit :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0