Jackal Posted July 29, 2007 Report Share Posted July 29, 2007 (edited) Nu man ir, piemēram, faili aaa.php include("klase.php"); $tpl = new tpl; $klase = new klase; $klase -> funkcija(); klase.php class klase{ function funkcija(){ $tpl->kaut_kada_funkcija(); } } Problēma ir tāda ka funkcija "kaut_kada_funkcija" netiek izsaukta, jo $tpl objekts tiek taisīts failā aaa.php un negribas viņu taisīt iekš klases "klase". Kā pareizi izsaukt funkciju "kaut_kada_funkcija"? Ceru, ka sapratāt. Edited July 29, 2007 by Jackal Link to comment Share on other sites More sharing options...
bubu Posted July 29, 2007 Report Share Posted July 29, 2007 $tpl = new tpl(); $klase = new klase(); $klase->funkcija($tpl); class klase { function funkcija($t) { $t->kaut_kada_funkcija(); } } Vai arī, ja daudzām funkcijām vajag to $tpl, tad padod klases to $tpl klases konstruktorā un saglabā member variablī. Link to comment Share on other sites More sharing options...
mefisto Posted July 29, 2007 Report Share Posted July 29, 2007 Es varbūt kaut ko jaucu, bet vai tad nevajdzētu izmantot references ? http://lv.php.net/manual/en/language.references.php Tādā veidā šajā kodā $tpl = new tpl(); $klase = new klase(); $klase->funkcija($tpl); class klase { function funkcija($t) { $t->kaut_kada_funkcija(); } } .. patiesībā būtu jābūt function funkcija(&$t){ $t->kaut_kada_funkcija(); } Protams ļoti iespējams ka es kļūdos. Link to comment Share on other sites More sharing options...
bubu Posted July 29, 2007 Report Share Posted July 29, 2007 Iekš php5 visi objekti automātiski tiek padoti pēc references. php4 es ignorēju, jo tā jau ir vēsture ;) http://lv.php.net/manual/en/language.oop5.basic.php When assigning an already created instance of a class to a new variable, the new variable will access the same instance as the object that was assigned. This behaviour is the same when passing instances to a function. Link to comment Share on other sites More sharing options...
Jackal Posted July 29, 2007 Author Report Share Posted July 29, 2007 Vai arī, ja daudzām funkcijām vajag to $tpl, tad padod klases to $tpl klases konstruktorā un saglabā member variablī. Nesanāca uztaisīt pēc šī varianta, jo nemāku vēl īsti oop. To $tpl vajag ļoti daudzām funkcijām un negribās katrai funkcijai padot atsevišķi. Varbūt iedosiet kādu piemēru? Link to comment Share on other sites More sharing options...
Delfins Posted July 29, 2007 Report Share Posted July 29, 2007 $o = new O($tpl); Link to comment Share on other sites More sharing options...
bubu Posted July 29, 2007 Report Share Posted July 29, 2007 Nesanāca uztaisīt pēc šī varianta, jo nemāku vēl īsti oop. Būtu labāk parādījis kas tev sanāca, nevis teicis, ka nekas nesanāca. http://catb.org/~esr/faqs/smart-questions.html#code class klase { var $t; function __construct($t) { $this->t = $t; } function funkcija() { $this->t->kaut_kada_funkcija(); } } $tpl = new tpl(); $klase = new klase($tpl); $klase->funkcija(); Link to comment Share on other sites More sharing options...
andrisp Posted July 29, 2007 Report Share Posted July 29, 2007 Man tieši nesen līdzīgu variantu vajadzēja. Izlīdzējos līdzīgi kā bubu variantā, tikai nedaudz savādāk. (Man vajadzēja vienkāršu veidu, kā klasēm piesaistīt datubāzes objektu. Un datubāzes objekts bija domāts izmantot vienu uz visām klasēm.) Nezinu vai tas ir labākais risinājums, bet neko savādāk nevarēju izdomāt. $db = new Db(); class klase { var $db; function __construct() { if (isset($GLOBALS['db']) && is_object($GLOBALS['db'])) { $this->db = $GLOBALS['db'] } } function funkcija() { $this->db->kaut_kada_funkcija(); } } Link to comment Share on other sites More sharing options...
bubu Posted July 29, 2007 Report Share Posted July 29, 2007 Tavu vajadzīgo lietu sauc par Singleton pattern'u. Design pattern'i (hvz kā latviski) ir noderīga lieta. Ja redzi, ka tavā gadījumā der kāds patterns, tad daudz nebūs jādomā par koda uzbūvi, jo katram patterna koda realizācija ir diezgan skaidra. Pamata patternus der iemācīties - interface, facade, delegate, composition. Drusku krutākus ar der zināt - factory, lazy initialization, singleton, proxy, observer, visitor, strategy, state, utt Link to comment Share on other sites More sharing options...
Recommended Posts