Jackal Posted September 23, 2007 Report 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?
v3rb0 Posted September 23, 2007 Report 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.
john.brown Posted September 23, 2007 Report 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
andrisp Posted September 24, 2007 Report 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.
black Posted September 25, 2007 Report 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
Recommended Posts