Jump to content
php.lv forumi

Problēmas ar funkcijas izsaukšanu


Jackal

Recommended Posts

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 by Jackal
Link to comment
Share on other sites

$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

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

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

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

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

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

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

×
×
  • Create New...