Jak předat dítěti objekt vlastního rodiče v PHP?

Kit

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #15 kdy: 15. 01. 2018, 20:56:01 »
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?


Lexa

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #16 kdy: 15. 01. 2018, 20:56:30 »
Citace od: gll kdy 15. 01. 2018, 20:53:50
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
Předpokládám, že takto je to špatně

proč?
proč to chci udělat nebo proč je to špatně?

Kit

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #17 kdy: 15. 01. 2018, 20:58:22 »
Citace od: gll kdy 15. 01. 2018, 20:53:50
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
Předpokládám, že takto je to špatně

proč?

Bylo by to dobře, kdyby tam v parametru nebylo $this.

Lexa

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #18 kdy: 15. 01. 2018, 20:59:54 »
Citace od: Kit kdy 15. 01. 2018, 20:56:01
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?
Ano chci, chci se totiž dostat z doplňků přes objekt Auto do class Prislusenstvi, class Upravy atd...

gll

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #19 kdy: 15. 01. 2018, 21:02:41 »
Citace od: Lexa kdy 15. 01. 2018, 20:56:30
Citace od: gll kdy 15. 01. 2018, 20:53:50
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
Předpokládám, že takto je to špatně

proč?
proč to chci udělat nebo proč je to špatně?

Proč je to špatně? Proč to chceš udělat asi víš nejlépe ty.


gll

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #20 kdy: 15. 01. 2018, 21:07:17 »
Citace od: Kit kdy 15. 01. 2018, 20:56:01
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?

myslím to vážně. Rozlišuji mezi programem a reálným světem. Strkání auta do rádia je jen tvá interpretace.

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #21 kdy: 15. 01. 2018, 22:01:00 »
Citace od: Lexa kdy 15. 01. 2018, 19:32:38
Ahojte, když vytvořím třídu s názvem Auto, v ní vytvořím další třídu Doplnky jaký mám nastavit parametr při vytváření třídy Doplnky, abych se dostal na objekty třídy Auto uvnitř třídy Doplnky? Ví někdo? Díky.

Pokud se bavíme o dědění, tak otázka nemá smysl - Doplnek by skutečně neměl být potomek třídy Auto. Potomkem třídy auto by mohl být například Osobak a Nakladak - mnemotechnická pomůcka Osobak je Auto.

Doplnek je ve skutečnosti součást auta a platí zde skládání. Mnemotechnická pomůcka: Auto má Doplnek. Pak otázka může mít smysl a mohlo by to být například takto (dovolil jsem si ponechat české názvy).

Kód (php) [Vybrat]

<?php

class Auto {

   protected
$sModel   = null;
   protected
$aDoplnky = array();

   public function
__construct($sModel){
       
$this->sModel = $sModel;
   }

   public function
pridejDoplnek($oDoplnek){
       
$oDoplnek->nastavAuto($this);
       
array_push($this->aDoplnky, $oDoplnek);
   }

   public function
dejModel(){
       return
$this->sModel;
   }

   public function
dejDoplnky(){
       return
$this->aDoplnky;
   }

   public function
__toString(){
       
$sToReturn = get_class($this) . ' "' . $this->sModel . '" pocet doplnku ' . sizeof($this->aDoplnky) . ' (';
       
$bSeparuj  = false;
       foreach (
$this->aDoplnky as $oDoplnek){
           if(
$bSeparuj){
               
$sToReturn .= ', ';
           }
           
$sToReturn .= $oDoplnek;
           
$bSeparuj = true;
       }
       
$sToReturn .= ')';
       return
$sToReturn;
   }

}

class
Doplnek {

   protected
$sNazev = null;
   protected
$oAuto  = null;

   public function
__construct($sNazev){
       
$this->sNazev = $sNazev;
   }

   public function
nastavAuto($oAuto){
       if(
$this->oAuto === null){
           
$this->oAuto  = $oAuto;
       } else {
           throw new
Exception("Doplnek je jiz instalovan v jinem aute!");
       }
   }

   public function
dejNazev()    {
       return
$this->sNazev;
   }


   public function
__toString(){
       return
get_class($this) . ' "' . $this->sNazev . '" v ' . ($this->oAuto !== null ? get_class($this->oAuto) . ' "' . $this->oAuto->dejModel() . '"': "NULL");
   }


}

$oSkoda = new Auto("Skoda 120");

$oKlima = new Doplnek("Klimatizace");
$oRadio = new Doplnek("Autoradio");
$oTempo = new Doplnek("Tempomat");

print(
$oSkoda  . "\n");
print(
$oKlima . "\n");
print(
$oRadio . "\n");
print(
$oTempo . "\n");

$oSkoda->pridejDoplnek($oKlima);
$oSkoda->pridejDoplnek($oRadio);
$oSkoda->pridejDoplnek($oTempo);

print(
$oSkoda  . "\n");
print(
$oKlima . "\n");

$oGolf = new Auto("WV Golf");

$oNavigace = new Doplnek("Navigace");
$oGolf->pridejDoplnek($oNavigace);
// $oGolf->pridejDoplnek($oTempo); // <-- toto jsme nepovolili

print($oGolf . "\n");

?>




.

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #22 kdy: 15. 01. 2018, 22:13:05 »
Citace od: Lexa kdy 15. 01. 2018, 20:47:17
Fajn, a jak dostanu do komponenty Doplnky objek třídy Auto? Předpokládám, že takto je to špatně
class Auto{
  function __construct(){
    $obj = new Doplnky ( $this);
  }
}

Na tom teoreticky není nic špatně. Jen bacha na to, že jsi v konstruktoru a co s tím objektem děláš.

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #23 kdy: 15. 01. 2018, 22:13:29 »
Citace od: Lexa kdy 15. 01. 2018, 20:59:54
Citace od: Kit kdy 15. 01. 2018, 20:56:01
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?
Ano chci, chci se totiž dostat z doplňků přes objekt Auto do class Prislusenstvi, class Upravy atd...

On chce mít asi vazbu Auto - Doplnek, což je běžný požadavek. Bude mít relaci buď 1:1 nebo 1:N nebo N:N, podle toho zda eviduje instance nebo jen jejich kategorie (zda eviduje u doplňku například sériové číslo nebo zda mu jen stačí, že je v autě obecně nějaké rádio). Pak sice nebude ,,auto strčené v rádiu", ale to rádio může vědět, v jakém autě je nainstalované a může si tudíž držet odkaz na jeho instanci. Zda to je dobrý nápad nebo není se nedá bez dalšího s určitostí říct. Může to vést k cyklickým referencím, což může vadit při serializaci, zhoršuje se přehled o kompetencích atd, nicméně to může  dávat smysl.

.

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #24 kdy: 15. 01. 2018, 22:14:10 »
Je jasné, že má jen zmatek v terminologii. Strčte si... doplněk do auta. KONEC.

Kit

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #25 kdy: 15. 01. 2018, 22:24:15 »
Citace od: gll kdy 15. 01. 2018, 21:07:17
Citace od: Kit kdy 15. 01. 2018, 20:56:01
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?

myslím to vážně. Rozlišuji mezi programem a reálným světem. Strkání auta do rádia je jen tvá interpretace.

No jo, i v reálném světě můžeš auto strčit do rádia. Výsledkem je rádio.

YCC

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #26 kdy: 16. 01. 2018, 00:06:22 »
Citace od: Kit kdy 15. 01. 2018, 22:24:15
Citace od: gll kdy 15. 01. 2018, 21:07:17
Citace od: Kit kdy 15. 01. 2018, 20:56:01
Ty chceš dávat auto do doplňků? To myslíš vážně? Viděl jsi už někdy auto? Už jsi někdy zkusil strčit auto do rádia?

myslím to vážně. Rozlišuji mezi programem a reálným světem. Strkání auta do rádia je jen tvá interpretace.

No jo, i v reálném světě můžeš auto strčit do rádia. Výsledkem je rádio.

Pics or it did not happen.

kolega

Re:Jak předat dítěti objekt vlastního rodiče v PHP?
« Odpověď #27 kdy: 16. 01. 2018, 14:41:56 »
Qt/C++ tohle dělá tak, že jako první parametr předává pointer na rodiče ...

Takže holt si definovat konstruktor tak, aby se předával rodič (když je to nutné)