Autor | Zpráva | ||
---|---|---|---|
Reprak Profil * |
#1 · Zasláno: 19. 2. 2010, 21:49:13
Zdravim, mam problem s rekurzi ve tride:
class gbook extends main { function gbook_odpovedi($id_kapely, $predek = 0, $zanoreni = 0) { $sql = mysql_query("SELECT * FROM `b_gbook` WHERE `g_ka_id`='".$id_kapely."' and `g_rodic_id`='".$predek."' ORDER BY `g_datum` DESC"); $zanoreni = $zanoreni + 50; while($dotaz = MySQL_Fetch_Array($sql)) { $uzivatel = $this->uzivatel_info($dotaz['g_uzivatel']); $vypis.= '<div style="padding-left: '.$zanoreni.'"><small><strong>'.$uzivatel['nick'].'</strong> - '.$dotaz['g_datum'].'</small><br />'.$dotaz['g_text'].'</div><br />'; $vypis.= $this->gbook_odpovedi($id_kapely, $dotaz['g_id'], $zanoreni); } $zanoreni = $zanoreni - 50; return $vypis; } ... je mi jasne, ze je chyba v $this->gbook_odpovedi(... protoze kdyz funkci "vyndam" ze tridy, odstranim $this->, tak bez problemu funguje...zkousel jsem i self::, ale beze zmeny - aktualne PHP nevypise zadnou chybu, funkce neudela vubec nic Dekuji za reakce |
||
mckay Profil |
#2 · Zasláno: 19. 2. 2010, 22:52:01
Reprak:
Nejsem si jistý, jestli ti poradím to co potřebuješ, ale zkus volat gbook::gbook_odpovedi(); |
||
Reprak Profil * |
#3 · Zasláno: 19. 2. 2010, 23:01:04
to jsem uz taky zkousel, nefunguje....
|
||
tiso Profil |
#4 · Zasláno: 19. 2. 2010, 23:04:42
Reprak: keď tam dáš
static function gbook_odpovedi(...) tak by to mohlo ísť.
|
||
Majkl578 Profil |
#5 · Zasláno: 19. 2. 2010, 23:06:22
tiso:
Ve statickém kontextu neexistuje $this. Reprak: Jak tu metodu voláš? Mimojiné, tohle je kód v PHP 4. |
||
Reprak Profil * |
Majkl578:
mas namysli: $gbook = NEW gbook; echo $gbook->gbook_odpovedi(K_ID); ?? |
||
fopen Profil * |
#7 · Zasláno: 19. 2. 2010, 23:40:30
možno by stalo za pokus zadeklarovať premennu $vypis ako vlastnosť triedy a pristupovať k nej referenčne $this->vypis
|
||
tiso Profil |
#8 · Zasláno: 20. 2. 2010, 00:01:41
Majkl578: ja viem, moja rada platí súčasne s radou od mckay-a.
btw. kde vidíš že toto je kód v PHP4? |
||
Majkl578 Profil |
#9 · Zasláno: 20. 2. 2010, 00:04:43 · Upravil/a: Majkl578
tiso:
v PHP 5 se běžně používá u metod viditelnost. mckayova odpověď má taktéž chybu static x $this. [#6] Reprak: To nám říká, že používáš instanci, tudíž $this je použito správně. Čitelnost kódu je ale hrozná. |
||
tiso Profil |
#10 · Zasláno: 20. 2. 2010, 00:27:08
Majkl578: keď sa neuvedie viditeľnosť, tak je public.
„mckayova odpověď má taktéž chybu static x $this.“ Si si istý? ... static function gbook_odpovedi(...){ ... $vypis.= gook::gbook_odpovedi(...); ... } |
||
Majkl578 Profil |
#11 · Zasláno: 20. 2. 2010, 00:34:38
[#10] tiso
To sice je, ale je zvykem uvádět i přesto. mckay navrhl změnu $this-> za gbook::, což je špatně, protože nestatická metoda volaná staticky emituje chybu E_STRICT. Navíc problém bude i v obsahu, jelikož $this ve statickém kontextu neexistuje (logicky). |
||
tiso Profil |
#12 · Zasláno: 20. 2. 2010, 00:40:35
Majkl578: tak ešte raz: keď to upraví podľa toho, ako som uviedol v [#10], tak tam bude aká chyba?
|
||
Majkl578 Profil |
#13 · Zasláno: 20. 2. 2010, 00:52:05
tiso:
Nemluvil jsem o tom, co jsi uvedl ty, ale o tom, co uvedl mckay. U toho tvého bude chyba pouze u jeho současného volání, viz [#6]. |
||
tiso Profil |
#14 · Zasláno: 20. 2. 2010, 02:31:57
Majkl578: tak neviem ako u teba, ale u mňa veta „ale zkus volat gbook::gbook_odpovedi();“
znamená, že všade, kde sa volá tá metóda ( $this->gbook_odpovedi(...) , či $gbook->gbook_odpovedi(...) ), sa to nahradí za gbook::gbook_odpovedi(...) .
|
||
Majkl578 Profil |
#15 · Zasláno: 20. 2. 2010, 02:57:36
tiso:
Ano, volání nestatické metody staticky. |
||
Časová prodleva: 14 let
|
0