Autor Zpráva
johndoe
Profil
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
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 *
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 *
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
ř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
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 *
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
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 *
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
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 *
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
a nechtěl by si se podepsat Anonymní?bych tě zaměstnal :)
Anonymní
Profil *
matak
no kamosi ma volaju Ero a cim ma chces zamestnas? mas naky objektovy kod pre mna? :D
matak
Profil
tak se přihlaš za člena, a dej mi tve icq
Ero
Profil *
nemam tu reg :) Ero (138-665-374)
Toto téma je uzamčeno. Odpověď nelze zaslat.