Jump to content
php.lv forumi

funkcija neredz objektu


Recommended Posts

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 post
Share on other sites

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 post
Share on other sites

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 by john.brown
Link to post
Share on other sites

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 post
Share on other sites
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 by black
Link to post
Share on other sites
×
×
  • Create New...