abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 18:11 | Zajímavý software

    Nazdar! je open source počítačová hra běžící také na Linuxu. Zdrojové kódy jsou k dispozici na GitHubu. Autorem je Michal Škoula.

    Ladislav Hagara | Komentářů: 0
    dnes 16:55 | Nová verze

    Po více než třech letech od vydání verze 1.4.0 byla vydána nová verze 1.5.0 správce balíčků GNU Guix a na něm postavené stejnojmenné distribuci GNU Guix. S init systémem a správcem služeb GNU Shepherd. S experimentální podporou jádra GNU Hurd. Na vývoji se podílelo 744 vývojářů. Přibylo 12 525 nových balíčků. Jejich aktuální počet je 30 011. Aktualizována byla také dokumentace.

    Ladislav Hagara | Komentářů: 2
    dnes 15:44 | Zajímavý software

    Na adrese gravit.huan.cz se objevila prezentace minimalistického redakčního systému GravIT. CMS je napsaný ve FastAPI a charakterizuje se především rychlým načítáním a jednoduchým ukládáním obsahu do textových souborů se syntaxí Markdown a YAML místo klasické databáze. GravIT cílí na uživatele, kteří preferují CMS s nízkými nároky, snadným verzováním (např. přes Git) a možností jednoduchého rozšiřování pomocí modulů. Redakční

    … více »
    2012 | Komentářů: 0
    dnes 12:55 | Zajímavý software

    Tým Qwen (Alibaba Cloud) uvolnil jako open-source své modely Qwen3‑TTS pro převádění textu na řeč. Sada obsahuje modely VoiceDesign (tvorba hlasu dle popisu), CustomVoice (stylizace) a Base (klonování hlasu). Modely podporují syntézu deseti různých jazyků (čeština a slovenština chybí). Stránka projektu na GitHubu, natrénované modely jsou dostupné na Hugging Face. Distribuováno pod licencí Apache‑2.0.

    NUKE GAZA! 🎆 | Komentářů: 0
    dnes 01:11 | Nová verze

    Svobodný citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 8. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | Nová verze

    Byla vydána verze 1.93.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.

    Ladislav Hagara | Komentářů: 0
    včera 14:00 | Komunita

    Svobodný operační systém ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows, slaví 30. narozeniny.

    Ladislav Hagara | Komentářů: 8
    včera 11:00 | IT novinky

    Společnost Raspberry Pi má nově v nabídce flash disky Raspberry Pi Flash Drive: 128 GB za 30 dolarů a 256 GB za 55 dolarů.

    Ladislav Hagara | Komentářů: 2
    včera 10:22 | Zajímavý software

    Technologie Skip pro multiplatformní mobilní vývoj, která umožňuje vývojářům vytvářet iOS a Android aplikace z jediné Swift a SwiftUI kódové základny, se s vydáním verze 1.7 stala open source.

    Ladislav Hagara | Komentářů: 6
    včera 03:33 | Zajímavý software Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (17%)
     (6%)
     (0%)
     (10%)
     (21%)
     (3%)
     (5%)
     (2%)
     (11%)
     (35%)
    Celkem 583 hlasů
     Komentářů: 17, poslední včera 15:24
    Rozcestník

    Dotaz: Jak dostat do třídy instanci své třídy v php

    13.10.2013 20:32 Jakub
    Jak dostat do třídy instanci své třídy v php
    Přečteno: 317×
    Když vytvořím instanci třídy 'Ovoce'
    $obj = Ovoce();
    a z té třídy volám jiné třídy které potřebují instanci třídy 'Ovoce', existuje řešení jak to udělat? Děkuji

    Odpovědi

    13.10.2013 20:46 Kit
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Ano, uvnitř třídy použiješ speciální proměnnou $this.
    13.10.2013 20:54 Jakub
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Myslel jsem to jinak, patrně jsem se špatně vyjádřil. Zkusím to lépe.

    Vytvořím instanci
    $obj = Ovoce();
    v class Ovoce zavolám jinou class Zelenina
    $obj2 = Zelenina();
    a v class Zelenina potřebuji zavolat metodu v class Ovoce.

    je to lépe k pochopení? Děkuji
    13.10.2013 21:11 Kit
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Není to sice úplně triviální, ale budiž:
    <?php
    class Ovoce {
        private $atribut;
        private $obj2;
    
        function __construct($atribut){
            $this->atribut = $atribut;
            $this->obj2 = new Zelenina($this);
        }
    
        function getAtribut(){
            return $this->atribut;
        }
    
        function __toString() {
            return "Ovoce a $this->obj2";
        }
    }
    
    class Zelenina {
        private $ovoce;
    
        function __construct(Ovoce $ovoce){
            $this->ovoce = $ovoce;
        }
    
        function __toString() {
            return "zeleniny mám: " . $this->ovoce->getAtribut() . " kusů";
        }
    
    }
    
    $obj = new Ovoce(42);
    echo $obj;
    
    Výsledek:
    Ovoce a zeleniny mám: 42 kusů
    13.10.2013 22:28 Jakub
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Tak to je na pochopení už docela mazec :-( Musím si to pořádně rozebrat.. Děkuji

    ještě tady mám úplně obyčejnou class, ze které opět nedostanu nic jiného než nadafinované proměnné na false. V každé metodě se uloží string který se ještě vypíše pokud tam vložím echo, ale v poslední metodě "show" už jsou zase všechny proměnné false, kde se to ztrácí? Děkuji
         class Test{
              private $item1 = false;
              private $item2 = false;
              private $item3 = false;
               public $show  = false;
    
              public function __construct(){
                   $this->item1();
                   $this->item2();
                   $this->item3();
              }
    
              public function item1(){
                   $this->item1 .= 'Text item1';
              }
    
              public function item2(){
                   $this->item2 .= 'Text item2';
              }
    
              public function item3(){
                   $this->item3 .= 'Text item3';
              }
    
              public function show(){
                   $this->show .= $this->item1;
                   $this->show .= $this->item2;
                   $this->show .= $this->item3;
              }
         }
    
         $test = new Test();
    
         var_dump($test->show); // bool(false)
    13.10.2013 22:43 Kit
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Kde voláš tu metodu show()? Podle mne nikde. Atributu $show zůstane původní hodnota. Kdo ti poradil, abys dělal atributy "public"? Mají být "private".

    To je tedy nápad, pojmenovávat atributy stejně jako metody. Nedivím se, že v tom máš guláš.

    A kdo ti poradil řetězit booleovskou hodnotu s řetězcem? Sice to tak nějak funguje, ale je to nesmysl.
    13.10.2013 23:16 Jakub
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Kde voláš tu metodu show()? Podle mne nikde. Atributu $show zůstane původní hodnota.
    Já jsem fakt pako :-(
    Kdo ti poradil, abys dělal atributy "public"? Mají být "private".
    Narážiš na tento zápis ?
    public $show  = false;
    Pokud ano, jak bych tu proměnnou pak vypsal?
    A kdo ti poradil řetězit booleovskou hodnotu s řetězcem? Sice to tak nějak funguje, ale je to nesmysl.
    tak jak to má být? Měl jsem za to, že když se jedná o inicializace proměnné je to fuk..
    public $show  = '';
    nebo
    public $show  = "";
    nebo úplně jinak
    
    Díky
    13.10.2013 23:21 Kit
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Nepotřebuješ obsah proměnné, ale metodu, která ti vypíše to, co potřebuješ. Proměnnou $show nepotřebuješ inicializovat, protože je úplně zbytečná. Vůbec tam nemusí být.
    13.10.2013 23:16 Kit
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Ten tvůj příklad by v reálu asi vypadal mnohem jednodušeji:
    <?php
    class Test {
        private $item1 = 'Text item1';
        private $item2 = 'Text item2';
        private $item3 = 'Text item3';
    
        public function __toString() {
            return $this->item1 . $this->item2 . $this->item1;
        }
    }
            
    $test = new Test();
    echo $test;
    
    Všechno ostatní je tam jaksi "navíc" a není příliš patrné, proč to tam máš.

    Vyhýbej se operátorům ".=" - nejsou moc efektivní a většinou ani nejsou potřebné.
    13.10.2013 23:37 Jakub
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Všechno ostatní je tam jaksi "navíc" a není příliš patrné, proč to tam máš.
    Byl to jen příklad, metody jsem tady nechtěl z důvodu přehlednosti rozvádět...

    Když si vezmu cenné ponaučení a vycházím z původního příkladu, tak ted je to OK ? Děkuji

    class Test{
              private $item1;
              private $item2;
              private $item3;
    
              public function __construct(){
                   $this->item1();
                   $this->item2();
                   $this->item3();
              }
    
              public function item1(){
                   $this->item1 = 'Text item1';
              }
    
              public function item2(){
                   $this->item2 = 'Text item2';
              }
    
              public function item3(){
                   $this->item3 = 'Text item3';
              }
    
              public function show(){
                   $this->show = $this->item1.$this->item2.$this->item1;
              }
    
              public function __toString(){
                   return show();
              }
         }
    
         $test = new Test();
    
         echo($test->show());
    13.10.2013 23:55 Kit
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Metodu __toString() tam máš navíc, protože jsi ji nepoužil. U metody show() ti chybí return. Atribut $this->show je opět zbytečný.

    Když místo posledních dvou metod budeš mít jen jednu
    public function __toString(){
       return $this->item1.$this->item2.$this->item1;
    }
    
    tak vůbec nebudeš potřebovat volat metodu show()
    $test = new Test();
    echo($test);
    
    Uvnitř objektu si udržuj atributy v atomickém stavu, ale vně objektu je prezentuj jako komplexní hotovou informaci, kterou k něčemu potřebuješ. Nesnaž se z vnějšku manipulovat s jednotlivými atributy, to je úkolem metod uvnitř objektu.
    14.10.2013 00:12 Jakub
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    Metodu __toString() tam máš navíc, protože jsi ji nepoužil.
    jak to že jsem ji nepoužil? ta metoda se zpracuje přece vždy?
    U metody show() ti chybí return.
    Ano to je pravda, to co jsem napsal je nesmysl, čili se dvěma metodama asi takto (doufám)
    public function show(){
      return $this->item1.$this->item2.$this->item1;
    }
    
    public function __toString(){
      return show();
    }
    
    Uvnitř objektu si udržuj atributy v atomickém stavu, ale vně objektu je prezentuj jako komplexní hotovou informaci, kterou k něčemu potřebuješ.
    Vůbec netuším co je to atomický stav, musím pohledat a nastudovat...
    Nesnaž se z vnějšku manipulovat s jednotlivými atributy, to je úkolem metod uvnitř objektu.
    No a tohle jde úplně mimo mne. Absolutně nerozumím co se mi snažíš poradit...
    14.10.2013 07:16 DarkKnight | skóre: 26
    Rozbalit Rozbalit vše Re: Jak dostat do třídy instanci své třídy v php
    metoda __toString() se zavola pouze v pripade, ze se pokusis vytisknout objekt (respektive kdyz ho pretypujes na string), proto ji mas zbytecnou (volas $objekt->show(), ne print $objekt)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.