Autor Zpráva
gekoncik
Profil
Ahoj,
mam tento problem:

class a{
var pro;
...

fucntion __construct(){
....
$this->pro = "kuk baff";
....
}
.....
}

class b{
....

$x = (hodnota proměnné "pro" z tridy "a")
....
}


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 *
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 *
oprava:
a v class b si mozes spravit instanciu triedy a,
ronnie
Profil
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

class a {
fucntion getPro () {
return"kuk baff";
}
...
}
...
$x = a::getPro();
gaminn
Profil *
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 *
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
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
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 *
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
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 *
tak singleton, vyhnes sa globalom
gekoncik
Profil
singleton? Co to je?
Anonymní
Profil *
navrhovy vzor, docitas sa o nom aj v manuale php
Anonymní
Profil *
a z definicie: singleton je trieda ktora ma jedinu instanciu
gekoncik
Profil
Problem vyřešen děkuji :)
Toto téma je uzamčeno. Odpověď nelze zaslat.