Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Lexa kdy 15. 01. 2018, 19:32:38

Název: Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: 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.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: dw kdy 15. 01. 2018, 19:45:54
parent::
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit kdy 15. 01. 2018, 20:07:15
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa kdy 15. 01. 2018, 20:12:17
Citace od: Kit kdy 15. 01. 2018, 20:07:15
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa kdy 15. 01. 2018, 20:16:30
Citace od: dw kdy 15. 01. 2018, 19:45:54
parent::
Nejedná se o extends class.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit kdy 15. 01. 2018, 20:20:17
Citace od: Lexa kdy 15. 01. 2018, 20:12:17
Citace od: Kit kdy 15. 01. 2018, 20:07:15
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?

Nemůžeš tvrdit, že Doplněk je Auto. Dědičnost zde vůbec není. Auto tedy není ani rodičem, ani dědou.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: prst kdy 15. 01. 2018, 20:23:17
Pokud mluvíš o instancích, tak stačí předat instanci třídy Auto, když chceš instanci třídy Auto - docela jednoduché, ne? Nebo jsem to nepochopil?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: <sdfasdfa kdy 15. 01. 2018, 20:27:57
Citace od: Lexa kdy 15. 01. 2018, 20:12:17
Citace od: Kit kdy 15. 01. 2018, 20:07:15
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?

bud odvozujeme potomka z rodicovske tridy na zaklade kladne odpovedi na otazku JE?
JE (trida) nakladak konkretnejsim pripadem (trida) automobilu.

nebo se vytvareji promenne (members) tridy na otazku MA?
MA automobil kola. zde se trida kolo neodvozuje od automobilu, ale trida auto bude obsahovat promennou kolo, nebo vektor kol pro 4 kola a volant :-)
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa kdy 15. 01. 2018, 20:34:08
Citace od: Kit kdy 15. 01. 2018, 20:20:17
Citace od: Lexa kdy 15. 01. 2018, 20:12:17
Citace od: Kit kdy 15. 01. 2018, 20:07:15
Tohle není příklad na dědičnost, ale na kompozici. Auto má Doplňky, proto nemůže být jejich rodičem.
A co tedy je jejich, děda?

Nemůžeš tvrdit, že Doplněk je Auto. Dědičnost zde vůbec není. Auto tedy není ani rodičem, ani dědou.
Ok, a co je tedy class Doplněk vůči class Auto ?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: YCC kdy 15. 01. 2018, 20:35:46
Opravdu chceme něco v PHP předávat dětem?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: gll kdy 15. 01. 2018, 20:39:06
Slovo rodič může znamenat i nadřazený uzel ve stromové struktuře. Je to správné pojmenování v obou případech.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit kdy 15. 01. 2018, 20:40:02
Citace od: prst kdy 15. 01. 2018, 20:23:17
Pokud mluvíš o instancích, tak stačí předat instanci třídy Auto, když chceš instanci třídy Auto - docela jednoduché, ne? Nebo jsem to nepochopil?

Chce do toho auta dát nepovinné doplňky. Typická kompozice. Vždy získá instanci třídy Auto, se kterým se následně bude dobře pracovat.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit kdy 15. 01. 2018, 20:41:22
Citace od: Lexa kdy 15. 01. 2018, 20:34:08
Citace od: Kit kdy 15. 01. 2018, 20:20:17
Nemůžeš tvrdit, že Doplněk je Auto. Dědičnost zde vůbec není. Auto tedy není ani rodičem, ani dědou.
Ok, a co je tedy class Doplněk vůči class Auto ?

Doplněk je komponentou třídy Auto.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Lexa kdy 15. 01. 2018, 20:47:17
Citace od: Kit kdy 15. 01. 2018, 20:41:22
Doplněk je komponentou třídy Auto.
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);
  }
}
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: 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č?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: 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?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: 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ě?
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Kit 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.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: 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...
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: gll 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.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: 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.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Ondrej Nemecek 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");

?>



Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: . 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áš.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: Ondrej Nemecek 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.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: . kdy 15. 01. 2018, 22:14:10
Je jasné, že má jen zmatek v terminologii. Strčte si... doplněk do auta. KONEC.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: 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.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: YCC 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.
Název: Re:Jak předat dítěti objekt vlastního rodiče v PHP?
Přispěvatel: kolega 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é)