Autor Zpráva
karel
Profil *
ahoj všem!


class Trida{
public function __construct(){
$kkk =& new JinaTrida();
}
}

class JinaTrida{
private $prom = ‘nejaka blbost’;
public function getProm(){
return $this->prom;
}
}

class TretiTrida{
public function VolejJinouTridu(){
echo $kkk->getProm();
}
}

$prvni = new Trida;
//vytvori objekt tridy Trida, ktery ve svem konstuktoru vytvori objekt tridy JinaTrida

$druhy = new TretiTrida;
$druhy->VolejJinouTridu();

//ve sve metode vola verejnou metodu objektu $kkk tridy JinaTrida
//otazka je, jestli je objekt $kkk pristupny, kdyz jsem ho v objektu
//$prvni vytvorij jako odkaz ($kkk =& new JinaTrida())?



díky za rady a/nebo nasměrování někam (ne do pr...e ;-))
K.
Profil *
Proměnná $kkk je lokální a je tedy vidět jenom a pouze v konstruktoru třídy Trida. I kdyby to byl přímo atribut té třídy, tak jej z jiné třídy bez ukazatele na tu první třídu nezavoláš (+ samozřejmě ještě záleží na tom, jestli k tomu atributu v první třídě máš přístup).

A předáním objektu s operátorem =& podle mě nic nezískáš, protože standartně vlastně dostaneš taky ukazatel na objekt.
anode
Profil
Přesně tak, $kkk je lokální a po doběhnutí konstruktoru se ztratí. Použití přiřazení =& s tím vůbec nesouvisí, znamená to předání referencí. Dříve (v PHP 4) se tak předávaly (skoro) všechny objekty, protože jinak by se kopírovaly. V PHP 5 se již objekty předávají referencí implicitně, tedy v tomto případě je použití =& zcela zbytečné.
A pokud bych měl někam směrovat, byl by to PHP manuál, myslím, že tam je to dostatečně popsáno... Zejména kapitoly 21. References Explained a 19. Classes and Objects (PHP 5).
karel
Profil *
děkuju všem! PHP man prostuduju!
Karel

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: