Diskuze: MVC - 4 díl seriálu - problém s príkladom

PHP PHP MVC - 4 díl seriálu - problém s príkladom American English version English version

Avatar
davidivad
Člen
Avatar
davidivad:

Čaute, prechádzam si seriál o MVC, momentálne som na 4 diele: http://www.itnetwork.cz/…ru-a-pohledu

no a mám problém tam s tým príkladom. Funguje mi, ale nechápem celkom jeho fungovaniu a premýšľam nad tým už asi hodinu a to nad jednou vecou: v triede SmerovacKontroler sa nachádza takýto kúsok kodu v metode "zpracuj":

if (file_exists('kon­trolery/' . $tridaKontroleru . '.php'))
$this->kontroler = new $tridaKontroleru;
else
$this->presmeruj('chy­ba');

momentálne je však celý systém vo fáze, kedy nemáme žiadne kontrolery v podstate a to znamená, že pri zadaní hocijakej adresy musí vyššie uvedená podmienka vyústiť do realizácie príkazu za "else" - teda presmerovanie. Potom však nechápem, prečo keď vymažem časť skriptu od if do else včetně, tak mi to nefunguje a vyhodí sa mi hláška: "smyčka při přesměřování". OK. To som teraz vyriešil tým, že som zmenil podmienku if(file_exists... na if(!file_exists.... a nechal som tam len to presmerovanie. Síce neviem z akého dovodu zatiaľ, ale pochopil som, že ak tam nebolo if, tak sa presmerovanie nejak moc opakovalo (smyčka)

avšak aj ďalej v kóde sa pracuje a jeho funkčnosť závisí na atribute kontroler, ktorý je ale faktický prázdny, kvoli ifu.

hej ja neviem, či mi niekto porozumie, idem spať, možno to zajtra pochopím...

 
Odpovědět 11.11.2014 23:59
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na davidivad
Matúš Petrofčík:

V podmienke sa overuje existencia daneho kontroleru. Ak taky kontroler neexistuje, presmerujeme na stranku /chyba, kedy sa zase kontroluje podmienka. Ak vravis ze v aplikacii zatial ziadne kontrolery nemame, tak test ci existuje ChybaKontroler vrati false a znovu sa presmeruje na chybovu stranku... A tak to pokracuje do nekonecna (teda kym prehliadac alebo server neukoncia spojenie)

Chapes? :)

Nahoru Odpovědět 12.11.2014 3:34
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na davidivad
Matúš Petrofčík:

A tym ze si vymazal tu podmienku a nechal len prikaz za else na presmerovanie, dostal si sa do takej fazy, kedy to presmerovanie prebehne vzdy. Takze sa ti stranka stale presmeruva dokola.

Nahoru Odpovědět 12.11.2014 3:40
obsah kocky = r^2 ... a preto vlak drnká
Avatar
davidivad
Člen
Avatar
davidivad:

Ďakujem za odpoveď. Tomu chápem.

Nerozumiem ale prečo ak vymažem riadok "$this->kontroler = new $tridaKontroleru" ktorý sa má vykonať ak máme nejaký kontroler, tak mi to vyhodí error v znení, že som volal metódu "zpracuj" na "neobjekte" (non object). To samozrejme sposobuje ten riadok za else v znení "$this->kontroler->zpracuj($napar­sovanaURL);"

Lenže ja tomu nerozumiem, lebo ak preca nie je naplnená podmienka if (teda nemáme potrebný kontroler) tak sa nemá vykonať príkaz podmienkou podmienený (to jest ten, ktorý som vymazal "$this->kontroler = new $tridaKontroleru") a nemože byť podľa neho vytvorená inštancia objektu. Inými slovami, ak je niečo podmienené splnením podmienky, ktorá splnená v mojej momentálnej situácii nie je, tak by malo byť jedno, či príkazy podmienkou podmienené vymažem, alebo nie. Evidentne to však jedno nie je (keď príkaz za podmienkou vymažem, tak hoci podmienka nie je splnená a vykonáva sa "else" hodí to error), a preto tomu nerozumiem.

 
Nahoru Odpovědět 12.11.2014 20:35
Avatar
davidivad
Člen
Avatar
davidivad:

Super. ja už som to pochopil. tam mi vznikne cyklus. na prvý krát sa podmienka vyhodnotí ako nanič (negatívne) a nastane presmerovanie na "chybu" tým sa spustí znovu ten istý skript a znovu sa dostanem k tejto podmienke, ale tentokrát sa vyhodnotí ako splnená (kontroler chyba existuje) a preto postupuje ďalej na tie ďalšie časti kódu, kde už pracuje s inštanciou kontrolera. no konečne. som fakt rád, že mi to došlo

 
Nahoru Odpovědět 12.11.2014 22:01
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na davidivad
Matúš Petrofčík:
  1. bolo by vhod používať pri odpovedi tlačítko Odpovědět :)
  2. ak vymazeš $this->kontroler = new $tridaKontroleru , tak nepriradíš do premennej $this->kontroler objekt XyzKontroler s ktorým neskôr pracuješ, teda voláš metódu zpracuj $this->kontroler->zpracuj(xy) ;)
  3. ak sa snažíš pochopiť čo ten kód robí ale nevieš načo slúži $this->kontroler = new $tridaKontroleru , asi bude dobré preštudovať tutoriál o OOP v PHP http://www.itnetwork.cz/php/oop
Editováno 12.11.2014 22:33
Nahoru Odpovědět 12.11.2014 22:32
obsah kocky = r^2 ... a preto vlak drnká
Avatar
davidivad
Člen
Avatar
Odpovídá na Matúš Petrofčík
davidivad:

jj. dík za radu. už mi to nejak docvaklo. Ja už som si oop php tutoriál prešiel vrátane prémiových článkov a vačšinu som skúšal prakticky - vynechával som len také tie špeciality na konci s tým, že sa k tomu vrátim, až bude treba. Takže kódu by som aj chápal, len som sa zasekol na tej logike, ktorá mi už docvakla :-) dík moc za odpovede

 
Nahoru Odpovědět 12.11.2014 22:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.