Autor | Zpráva | ||
---|---|---|---|
gekoncik Profil |
#1 · Zasláno: 10. 9. 2006, 15:42:31 · Upravil/a: gekoncik
Ahoj,
mam tento problem:
Nevíte jak toto udělat, bez dědičnosti a konstant? Napadlo mě to dělat přes operator Paamayim Nekudotayim (::) ale nějak se mi nedaří to správně poskládat :( |
||
Anonymní Profil * |
#2 · Zasláno: 10. 9. 2006, 15:52:03
pro neni staticka premenna ani triedna konstanta takze operator :: pouzit nemozes
v class a si aplikuj metodu: function getPro() { return $this->pro; } a v class b si mozes spravit instanciu triedy b, $a = new a(); $x = $a->getPro(); |
||
Anonymní Profil * |
#3 · Zasláno: 10. 9. 2006, 15:52:41
oprava:
a v class b si mozes spravit instanciu triedy a, |
||
ronnie Profil |
#4 · Zasláno: 10. 9. 2006, 16:02:11 · Upravil/a: ronnie
Klíčové slovo var se používalo v PHP 4, teď používej zapozdření (public/protected/private).
Jinak Tvůj příklad lze vyřešit jednoduše: class a{ private $pro; public function __construct(){ $this->pro = "kuk baff"; } } class b{ public $x; public function __construct(){ $trida = new a; $this->x = $trida->pro; } } |
||
mila Profil |
#5 · Zasláno: 10. 9. 2006, 16:02:48
|
||
gaminn Profil * |
#6 · Zasláno: 10. 9. 2006, 16:05:04
gekoncik
Vypadá to, že ti stačí statická proměnná, proto prostě dej do třídy A: static $pro = 'hodnota'; Kdekoliv v kódu pak můžeš volat a::$pro. Pokud bys potřeboval získat hodnotu nějaké instance třídy A, potom bys do třídy B musel samozřejmě instanci třídy A dodat. |
||
Anonymní Profil * |
#7 · Zasláno: 10. 9. 2006, 16:09:26
mila
iste ale v php5 to vyhodi E_STRICT hlasku o statickom volani metody ktora nieje definovana ako staticka mimo kontextu toho objektu |
||
mila Profil |
#8 · Zasláno: 10. 9. 2006, 16:10:19
Předpokládám, že proměná je statická a nemění se. V takovém případě mi přijde hloupé kvůli tomu vytvářet nový objekt.
Pokud se proměná mění, tak je něco špatně v návrhu. Buď by objekt b měl mít odněkud objekt a (jak má poznak, ze které instance chci proměnou), nebo bych použil něco jako singleton. Jestli se hodnota mění, ale instance je jenom jedna, tak použij v php5 statické proměné. V php4 to je třeba ohackovat... |
||
mila Profil |
#9 · Zasláno: 10. 9. 2006, 16:12:15
iste ale v php5 to vyhodi E_STRICT hlasku o statickom volani metody ktora nieje definovana ako staticka mimo kontextu toho objektu
Preferuji potlačit chyby E_STRICT za cenu toho, že kód funguje v php 4. Jestli píšej jen pro php5, není problém dopsat slovo static. |
||
Anonymní Profil * |
#10 · Zasláno: 10. 9. 2006, 16:21:34
mila
ano ale ako vidiet on patrne ziada pracovat s premennou ktora sa meni a ne s konstantou strict hlasky su na to aby programatora informovali ze dana moznost moze byt niekedy v buducne odstranena (pouzitie $this pseudopremennej v statickej metode) |
||
gekoncik Profil |
#11 · Zasláno: 10. 9. 2006, 17:19:11
Ja ale potrebuju do promenne PRO vlozit nejaky data ktery ziskam az v konstruktoru. A cela trida A je trosku slozitejsi abych ji volal znova jak cely objekt. Protoze je A je doplnena B - mohla by se pouzit dedicnost ale pak by tam nesmela byt trida C, D, E, ... :) Takze prave potrebuju ziskat nejaky data z tridy A (promenna PRO) a ty "tahat" do trid B, C, D, E, F, ... Jinak by to bylo brnkacka.
Uplne nejednoduse by se delo rict ze potrebuju GLOBALNI promenou mezi tridama :) Jeste jedna vec by vam mohla pomoct... Pro propojeni trid pouzivam v A: ... $b = new a(); $c = nex c(); .... global $b, $c; $this->_class['a'] = & $b; $this->_class['b'] = & $b; .... $this->_class['a']->fce(....); $this->_class['b']->fce(....); .... |
||
Anonymní Profil * |
#12 · Zasláno: 10. 9. 2006, 17:25:56
tak singleton, vyhnes sa globalom
|
||
gekoncik Profil |
#13 · Zasláno: 10. 9. 2006, 17:31:53
singleton? Co to je?
|
||
Anonymní Profil * |
#14 · Zasláno: 10. 9. 2006, 17:47:07
navrhovy vzor, docitas sa o nom aj v manuale php
|
||
Anonymní Profil * |
#15 · Zasláno: 10. 9. 2006, 17:47:55
a z definicie: singleton je trieda ktora ma jedinu instanciu
|
||
gekoncik Profil |
#16 · Zasláno: 10. 9. 2006, 22:31:15
Problem vyřešen děkuji :)
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0