| Autor | Zpráva | ||
|---|---|---|---|
| Marek123 Profil * |
#1 · Zasláno: 10. 6. 2008, 14:43:55
Potreboval bych poradit s nasledujucim kodem:
<?php class nacitana { public function write() { echo "nacitana "; } } class zaklad { public function __construct() { $nacitana = new nacitana(); } } class rozsirena extends zaklad { public function __construct() { parent::nacitana->write(); } } ?> Chtel bych v class rozsirena pouzivat funkci z classy nacitana, vedel by mi nekdo poradit, resp. usmernit ci mam spravne mysleni? |
||
| joe Profil |
#2 · Zasláno: 10. 6. 2008, 15:10:48 · Upravil/a: joe
Nějak jsem to udělal, ale nevím jestli to je správný přístup :-) Dědění v php snad ani nepoužívám...
<?php
class nacitana {
public function write() {
echo "<b>write</b><br>";
}
}
class zaklad {
private $nacitana;
public function __construct() {
$this->nacitana = new nacitana();
echo "vytvorena: zakladni<br>";
$this->nacitana->write();
}
public function getNacitana() {
return $this->nacitana;
}
}
class rozsirena extends zaklad {
public function __construct() {
parent::__construct();
echo "vytvorena: rozsirena<br>";
parent::getNacitana()->write();
}
}
$rozsirena = new rozsirena();
?> |
||
| MaxwellDemon Profil |
#3 · Zasláno: 11. 6. 2008, 04:18:48
tak předně co se tvojí ukázky týče - základem úspěchu je vědět, jestli tu proměnnou $nacitana má mít možnost měnit jenom ta parent třída (a ostatním maximálně getovat její hodnotu) ... pak je na místě řešení, co máš dole od joea ... v případě, že ta proměnná je děděná a má bejt editovatelná i v child classech, tak by nebyla private, ale protected ... a pak na ní v těch vyděděných třídách (rozsirena) budeš přistupovat úplně normálně jako k jejich vlastnímu memberovi ... $this->nacitana
s použitím member funkcí je to stejný ... pokud chceš, aby byla viditelná jenom v parent třídě, pak bude private ... pokud má být viditelná jenom ve všech vyděděných classech, bude protected ... pokud má být viditelná a volatelná odevšud, pak bude public takže ten tvůj kód by vypadal v nejjednodušší podobě následovně <?php class nacitana { public function write() { echo "nacitana "; } } class zaklad { protected $nacitana = null; // bez tohodle bude mit ta promenna lokalni platnost v ramci funkce a neuvidis na ni nikde jinde nez v tom konstruktoru (tak jak jsi to prve napsal) public function __construct() { $this->nacitana = new nacitana(); } } class rozsirena extends zaklad { public function __construct() { parent::__construct(); $this->nacitana->write(); } } ?> |
||
| MaxwellDemon Profil |
#4 · Zasláno: 11. 6. 2008, 04:22:09
teď to po sobě čtu a pokud má být viditelná jenom ve všech vyděděných classech, bude protected má být správně - pokud má být viditelná jenom v parent a ve všech vyděděných classech, bude protected (nebude volatelná zvenčí) :-)
|
||
|
Časová prodleva: 17 let
|
|||
0