Autor | Zpráva | ||
---|---|---|---|
johndoe Profil |
#1 · Zasláno: 18. 9. 2006, 16:45:14
Ahoj,
nevím, jestli někde dělám chybu, nebo jestli to schválně nefunguje. mám class A { public $pole; function __construct(){ $this->pole = array(); } function pridej_do pole($neco) { $this->pole[] = $neco; echo count($this->pole) // toto vypise skutecne 1 } function vypis_pole() { foreach($this->pole as hodnota { echo $hodnota; } } } class B extends A { $this->pridej_pole("pridana_vec"); } $a = new A; $b = new B; $a->vypis_pole(); // nevypise nic, pole $pole je prazdne (0 prvku) chtěl bych, aby to takto přidalo do $pole ten prvek a už tam zůstal po dobu dalších akcí v rámci A nebo B .... díky |
||
matak Profil |
#2 · Zasláno: 18. 9. 2006, 16:52:55
no a neni to tak ze prida do pole ale ktere se vytvari v tride B?protoze dedi z tridy A? takze $b->vypis_pole() to opravdu vypise? nemel by teda pridani vypadat nějak takto?
parent::pridej_pole("neco"); syntaxí si nejsem jistý |
||
Anonymní Profil * |
#3 · Zasláno: 18. 9. 2006, 16:52:55
hehe uz zase? inak mas dost kostrbaty kod... vidim to na same parse errors, chybajuce zatvorky, premenne tam kde nemaju a naopak :)
trocha som ti to skorektoval class A { public $pole; function __construct(){ $this->pole = array(); } function pridej_pole($neco) { $this->pole[] = $neco; echo count($this->pole); // toto vypise skutecne 1 } function vypis_pole() { foreach ($this->pole as $hodnota) { echo $hodnota; } } } class B extends A { public function __construct() { $this->pridej_pole("pridana_vec"); } } $a = new A; $b = new B; $b->vypis_pole(); |
||
Anonymní Profil * |
#4 · Zasláno: 18. 9. 2006, 16:55:31
cele je to ovsem o zapuzdreni, to je specificka vlastnost u objektoveho programovania, odporucam naku literaturu :)
$a->vypis_pole(); sice zavola tu funkciu (zdedenu z A) ale kedze bol prvok pridany az v konstruktore B, instancia $b obsahuje pole s pridanym prvkom podla $b=new B, cize v A je to pole prazdne |
||
matak Profil |
#5 · Zasláno: 18. 9. 2006, 16:58:55
řekl bych že otázka zněla jak přidat hodnotu rodičovi a myslím, že se to dělá nějak tak jak sem napsal
|
||
johndoe Profil |
#6 · Zasláno: 18. 9. 2006, 17:01:32
to MatakMáš pravdu, když to zavolám jako $b->vypis_pole, tak to opravdu vypíše správně. Když to ale v rámci $b spustím jako parent::pridej_pole, chová se to ale stejně.
Potřeboval bych nějak měnit to "základní" $pole , abch ho mohl použít i v jiných objektech, ovšem každý by ho mohl měnit a ty prvky by se "sdílely" .. nevím,jestli tomu je rozumět, co vlastně chci :( To Anonymní : :) nojo, furt se v tom vrtám ...ten kód není real, jen tak to sypu pro představu, jak to vlstně vypadá , nechci to tu zahltit "ostrými" kódy.... BTW, nějk nemůžu najít ty korektury :) |
||
Anonymní Profil * |
#7 · Zasláno: 18. 9. 2006, 17:02:00
matak
hodnotu rodicovi by bolo mozne takto sice predat ale treba si rozmyslet, ze hodnota pole je PUBLIC, to znamena ze ju maju spolocnu.. co sa preda potomkovi je spolocne i pre rodica ide o to ze on tu metodu spustal v triede B podla ktorej spravil potom objekt $b predtym v $a tato metoda spustena nebola a teda nebol pridany prvok do pola |
||
matak Profil |
#8 · Zasláno: 18. 9. 2006, 17:07:43
no tvuj dotaz zni asi tak, jak v instanci $b změnit prvek instance $a kdyz $b instance třídy B je potomkem třídy A, no tak dej to private $pole a pak by to melo chodit s tim parent:: ne??
|
||
Anonymní Profil * |
#9 · Zasláno: 18. 9. 2006, 17:08:58
johndoe
Potřeboval bych nějak měnit to "základní" $pole , abch ho mohl použít i v jiných objektech, ovšem každý by ho mohl měnit a ty prvky by se "sdílely" .. nevím,jestli tomu je rozumět, co vlastně chci :( deklaruj si $pole ako private v tej istej triede kde deklarujes public si napis metodu getPole() public function getPole() { return $this->pole; } tym zabranis aby ti ktokolvek zvonku prepisal premennu pokial triedu rozsiris, tak ta hodnota nebude menitelna vramci kontextu noveho potomka (neviditelna) mozes teda definovat $pole ako protected, alebo pouzijes parent:: volanie ovsem ono sa to v praxi moc malo pouziva pretoze pokial si dobre nadefinujes triedu a vsetky funkcie pre pracu s vlastnostami v nej, tak ti zarucujem ze toto volanie nebudes pouzivat ;) maximalne tak na konstruktor! |
||
johndoe Profil |
#10 · Zasláno: 18. 9. 2006, 17:13:59
no, ještě to přehodnotím ... myslím, že celý můj problém spočívá ve špatném chápání celého principu objektů a dědičnosti ...
každopádně díky oběma, zkusím si ve Vašich radách povrtat a uvidím, co z toho bude :) |
||
Anonymní Profil * |
#11 · Zasláno: 18. 9. 2006, 17:14:38
matak
menit vlastnosti v roznych instanciach je mozne pokial sa vratime na ich abstraktnu uroven a to je.. sablona cize trieda.. definovanim pola ako STATIC by sme mohli zmenou statickej vlastnostnosti v objektu $b ovplyvnit vlastnost v objekte $a... ovsem su lepsie cesty ako som popisoval :) pretoze static mi prijde tak.. mimo zapuzdrenie |
||
matak Profil |
#12 · Zasláno: 18. 9. 2006, 17:16:06
a nechtěl by si se podepsat Anonymní?bych tě zaměstnal :)
|
||
Anonymní Profil * |
#13 · Zasláno: 18. 9. 2006, 17:19:22
matak
no kamosi ma volaju Ero a cim ma chces zamestnas? mas naky objektovy kod pre mna? :D |
||
matak Profil |
#14 · Zasláno: 18. 9. 2006, 17:23:14
tak se přihlaš za člena, a dej mi tve icq
|
||
Ero Profil * |
#15 · Zasláno: 18. 9. 2006, 18:00:23
nemam tu reg :) Ero (138-665-374)
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0