Autor | Zpráva | ||
---|---|---|---|
Orlando Profil * |
#1 · Zasláno: 16. 10. 2013, 20:45:19
Ahoj, dejme tomu, že mám 3 x class a potřeboval bych se mezi nima pohybovat v tom smyslu, že budu mít s každé této class přístup do každé class a to jak volat metody tak i přístup do proměnných. Něco takového bych potřeboval, ale funkčního ;-) Poradí někdo? Díky
class Syn extends Tata { private $syn = "syn"; public function __construct() { // ??? Přepiš proměnnou $tata v class Tata // ??? Přepiš proměnnou $dcera v class Dcera } } class Dcera extends Tata { private $dcera = "dcera"; public function __construct() { // ??? Přepiš proměnnou $tata v class Tata // ??? Přepiš proměnnou $syn v class Syn } } class Tata { private $tata = "tata"; public function __construct() { $this->obj1 = new Syn(); $this->obj1 = new Dcera(); // ??? Přepiš proměnnou $syn v class Syn // ??? Přepiš proměnnou $dcera v class Dcera } } new Tata(); |
||
Joker Profil |
#2 · Zasláno: 16. 10. 2013, 20:51:50
Orlando:
Nebyl by nějaký lepší nadpis? Co se týká otázky, záleží na tom, jaký to má mít smysl. Vhodné řešení musí odpovídat účelu. Ale obecně jsou dva způsoby, jak dostat funkčnost nějaké třídy do jiné třídy: Skládání a dědění. |
||
juriad Profil |
#3 · Zasláno: 16. 10. 2013, 23:35:17
Orlando:
Jedna z největších výhod objektového programování je možnost definovat pevné rozhraní k datům; a to se právě snažíš porušit. <?php abstract class Osoba { private $jmeno; private $otec; private $matka; private $pohlavi; protected $deti; protected $ziva; protected function __construct($jmeno, $pohlavi, $otec, $matka) { $this->jmeno = $jmeno; $this->pohlavi = $pohlavi; $this->ziva = true; $this->deti = array(); $this->otec = $otec; if($otec != null) { $otec->deti[] = $this; } $this->matka = $matka; if($matka != null) { $matka->deti[] = $this; } } public function getJmeno() { return $this->jmeno; } public function getPohlavi() { return $this->pohlavi; } public function getOtec() { return $this->otec; } public function getMatka() { return $this->matka; } public function getDeti() { return $this->deti; } public function jeZiva() { return $this->ziva; } } class Zena extends Osoba { public function __construct($jmeno, $otec, $matka) { parent::__construct($jmeno, 'zena', $otec, $matka); } public function splod(Muz $muz, $jmeno, $pohlavi) { if(!$this->jeZiva() || $muz == null || !$muz->jeZiva()) { throw new Exception("Nekrofil"); } switch($pohlavi) { case 'zena': $dite = new Zena($jmeno, $muz, $this); break; case 'muz': $dite = new Muz($jmeno, $muz, $this); break; default: throw new Exception("Spatne pohlavi"); } return $dite; } } class Muz extends Osoba { public function __construct($jmeno, $otec, $matka) { parent::__construct($jmeno, 'muz', $otec, $matka); } public function vytvorZZebraZenu($jmeno) { if(!$this->jeZiva()) { throw new Exception("Zebro uz nefunguje"); } return new Zena($jmeno, null, null); } public function zabij(Osoba $osoba) { if(!$this->jeZiva()) { throw new Exception("Mrtvy nemuze zabit"); } $osoba->ziva = false; } } $adam = new Muz('Adam', null, null); $eva = $adam->vytvorZZebraZenu('Eva'); $kain = $eva->splod($adam, 'Kain', 'muz'); $abel = $eva->splod($adam, 'Abel', 'muz'); $kain->zabij($abel); |
||
Orlando Profil * |
#4 · Zasláno: 17. 10. 2013, 00:05:56
Ano, napsal jsi to zcela správně, "Jedna z největších výhod objektového programování je možnost definovat..." a já tuto možnost nechci využít ;-)
|
||
Tori Profil |
#5 · Zasláno: 17. 10. 2013, 00:24:26
Orlando:
A co je účelem / cílem? Jaké entity představují ty 3 třídy? Je vůbec nutné, aby dvě z nich byly potomky třetí? |
||
Časová prodleva: 11 let
|
0