Autor Zpráva
monarcha
Profil
ahoj všem. Mám třídu, např. trida1.class.php, která vypadá nějak takto:


class tTr1 {
var cislo1,
cislo2;

function setAttribute($attr) {
...
}
}


a dále třídu 2, ve které si v poli ukládám instane třídy 1:

class tTr2 {
var zasobnik=array();

funcion pridejTr1($tr1) {
$pom=array();
$pom=$this->zasobnik;
$pom[]=$tr1;
$zasobnik=$pom;
}

function getTr1($i) {
return ($this->zasobnik[$i]);
}
}


v hlavním programu si naplním zásobník a někde jinde trochu změnit proměnou v instanci třídy tr1. To mi ale nefunguje:

$tr1=new tTr1;
$zasobnik=new tTr2;

$tr1->setAttribute(...);
$zasobnik->pridejTr1($tr1);
...
$a=$zasobnik->getTr1(0);
$a->setAttribute(...); // tento radek nefunguje tak, jak bych ocekaval


Poradí mi někdo, čím by to mohlo být? Dík, Lukáš
Ronnie
Profil
Metoda pridejTr1() je napsána zcela chybně, správně by to mělo být


funcion pridejTr1($tr1) {
$this->zasobnik[] = $tr1;
}


Předchozí příklad nenaplňuje atribut $zásobník.
one_k
Profil
mas to cele spatne nastuduj si neco o OOP.
http://cz.php.net/manual/cs/language.oop.php
monarcha
Profil
Ronnie určitě je to takhle lepší, ten kód tam byl asi jako nějake zbytek pokusů. Po zavolání print_r($zasobnik) v hlavním programu se ale vypíše naprosto to samé. Já si spíš myslím, že problém bude někde ve funkci getTr1.
Po zavolání
$a=$zasobnik->getTr1(0);
$a->setAttribute(...);
print_r($a);
program vypíše to, co bych čekal, ale print_r($zasobnik) vypíše původní hodnoty. Řekl bych, že to bude něco s předáváním ukazatele/hodnoty ve funkci getTr1...ale to je spíš otázka.

one_k http://cz.php.net/manual/cs/language.oop.php jsem si tak zběžně pročetl, ale že bych to měl celé špatně, to se mi nezdálo. S OOP začínám, to je pravda. Ale myslím, že struktura tříd a vytvoření jejich instancí tam mám (alespoň podle mého názoru) správně a špatně mám jenom obsah funkcí, což jsou v uvedeném příkladu asi 4 řádky, na které se pávě ptám.
one_k
Profil
monarcha
Cely tvuj priklad nechapu.
Je to mozna tim ze je patek, ale pripada mi ze se snazis o neco naprosto zbytecneho.
Proc misto $a->setAttribute(); nevolas $tr1->setAttribute()?

Z jakeho duvodu potrebujes mit zasobnik(pole) s instancemi?
monarcha
Profil
one_k
je to čistě testovací příklad, který by šel použít třeba u košíku v e-shopu. tr1 by pak bylo zboží, tr2 nákupní košík, který obsahuje několik položek.
$tr1 pak nechci volat proto, že to nemusím mít k dispozici (například proto, že by se mohl obsah košíku načítat ze session)
one_k
Profil
aha. Vazne si to OOP prostuduj.
V tom tvem prikladu si vytvaris instanci tridy Trida1 a predavas ji Tride2 pak volas metodu Tridy2, ktera ti vraci instanci Tridy1.
IMHO to je blbost. Pak tam mas zbytecne 2 totozne instance.
Timto zpusobem zapisu(co uvadis) budes mit $tr1 vzdy k dispozici(pokud neprovedes unset nebo destruct).
monarcha
Profil
takže return ($this->zasobnik[$i]) vytvoří novou instanci třídy a tu vrátí? A lze předat něco jako ukazatel a nevytvářet novou instanci?
one_k
Profil
ne.
ten return ji nevytvori. Ty ji vytvoris a pak ji predas Tride 2 a tou funkci si ji vracis.
Lze predat ukazatel &$tr1
monarcha
Profil
ok. Dík za tvůj čas
Toto téma je uzamčeno. Odpověď nelze zaslat.

0