Jackal Posted September 23, 2007 Report Share Posted September 23, 2007 Ir šāds skripts: index.php $tmpl = new tmpl(); include('class1.php'); $class1 = new class1($tmpl); $class->aaa(); class1.php class class1{ var $tmpl; function class1($tmpl){ $this->tmpl = $tmpl } function aaa(){ $this->tmpl->bbb(); include('class2.php'); $class2 = new class2($tmpl); $class2->ccc(); } } class2.php class class2{ var $tmpl; function class2($tmpl){ $this->tmpl = $tmpl } function ccc(){ $this->tmpl->bbb(); } } Lieta tāda, ka funkcijā ccc rāda, ka nav definēts objekts $tmpl, bet funkcijā aaa viss strādā. Ko es esmu nepareizi izdarijis? Link to comment Share on other sites More sharing options...
v3rb0 Posted September 23, 2007 Report Share Posted September 23, 2007 kur iekš aaa() ir definēts mainīgais $tmpl? vispār, nav diez ko forši, šitā visur vazāt līdz to objectu, jo klases tas tikai samudžina un padara grūtāk reusojamas, un ja oop rakstīts kods nav reusojams, tad no oop nav nekāda jēga, tikpat labi varēja spagetti kodu rakstīt. ja viss notiek ar php4, tad obligāti & pieliec un līdzi dod tikai referenci. Link to comment Share on other sites More sharing options...
andrisp Posted September 23, 2007 Report Share Posted September 23, 2007 Var jau arī $GLOBALS['tmpl'] imo. Link to comment Share on other sites More sharing options...
john.brown Posted September 23, 2007 Report Share Posted September 23, 2007 (edited) Kā w3rb0 teica, kļūda ir šitajā rindiņā: $class2 = new class2($tmpl);. Pareizi, acīm redzot, būtu: $class2 = new class2($this->tmpl); andrisp, nevajag cilvēkam mācīt sliktu kodēšanas stilu. Ja šis mēģina smalku oop rakstīt, tad par globālajiem variabļiem vēlams aizmirst, ja, protams, nav vēlēšanās iedzīvoties grūti izķeramās problēmās :) Jackal, vispār, ja visās tajās klasēs tiek izmantots viens un tas pats tmpl objekts, tad pats dievs ir vēlējis singleton paternu izmantot. Šeit vari paskatīt: http://php.lv/f/index.php?s=&showtopic...ost&p=57769 Un vēl, iekš php ir pieņemts klašu nosaukumus sākt ar lielo burtu - sīkums, bet koda lasīšanu uzlabo... :) Edited September 23, 2007 by john.brown Link to comment Share on other sites More sharing options...
andrisp Posted September 24, 2007 Report Share Posted September 24, 2007 john.brown, stils tas nav pats labākais, bet šī bija vienīgā metode, ko varēju izdomāt kā vienkāršā veidā varētu starp dažādām klasēm jūzot vienu un to pašu objektu (manā gadijumā tas bija db objekts, kas tiek izveidots pirms visiem citiem objektiem). Bet nu ko nu es par PHP OOP - esmu vēl tikai iesācējs. Link to comment Share on other sites More sharing options...
black Posted September 25, 2007 Report Share Posted September 25, 2007 (edited) Un vēl, iekš php ir pieņemts klašu nosaukumus sākt ar lielo burtu - sīkums, bet koda lasīšanu uzlabo... :) Mana latviešu valodas skolotāja kādreiz stāstīja, ka vārdu Dievs arī raksta ar lielu burtu. Sorry, nevarēju noturēties :) Edited September 25, 2007 by black Link to comment Share on other sites More sharing options...
Recommended Posts