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 05:11 | Nová verze

    Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 5.0.0. Nově je oficiálně podporován Linux ARM64/AArch64. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.

    Ladislav Hagara | Komentářů: 0
    dnes 00:33 | Nová verze

    Byla vydána verze 10 dnes již multiplatformního open source frameworku .NET (Wikipedie). Přehled novinek v příspěvku na blogu Microsoftu. Další informace v poznámkách k vydání na GitHubu nebo v přednáškách na právě probíhající konferenci .NET Conf 2025.

    Ladislav Hagara | Komentářů: 0
    včera 22:33 | IT novinky

    Rodina hardwaru služby Steam se začátkem roku 2026 rozroste. Steam Deck doplní nový Steam Controller, herní PC Steam Machine se SteamOS s KDE Plasmou a bezdrátový VR headset s vlastními ovladači Steam Frame.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | IT novinky

    Amazon Web Services (AWS) oznámil (en) výstavbu Fastnetu – strategického transatlantického optického kabelu, který propojí americký stát Maryland s irským hrabstvím Cork a zajistí rychlý a spolehlivý přenos cloudových služeb a AI přes Atlantik. Fastnet je odpovědí na rostoucí poptávku po rychlém a spolehlivém přenosu dat mezi kontinenty. Systém byl navržen s ohledem na rostoucí provoz související s rozvojem umělé inteligence a

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 15:11 | IT novinky

    Evropská komise zkoumá možnosti, jak přinutit členské státy Evropské unie, aby ze svých telekomunikačních sítí postupně vyloučily čínské dodavatele Huawei a ZTE. Místopředsedkyně EK Henna Virkkunenová chce změnit doporučení nepoužívat rizikové dodavatele při budování mobilních sítí z roku 2020 v právně závazný požadavek.

    Ladislav Hagara | Komentářů: 7
    včera 12:44 | Bezpečnostní upozornění

    sudo-rs, tj. sudo a su přepsané do programovacího jazyka Rust, již obsaženo v Ubuntu 25.10, bylo vydáno ve verzi 0.2.10. Opraveny jsou 2 bezpečnostní chyby.

    Ladislav Hagara | Komentářů: 1
    včera 12:22 | IT novinky Ladislav Hagara | Komentářů: 4
    včera 11:55 | Zajímavý software

    Společnost Avalonia UI oznámila, že pracuje na .NET MAUI pro Linux a webový prohlížeč. Vyzkoušet lze demo v prohlížeči. Když bude backend stabilní, bude vydán jako open source pod licencí MIT.

    Ladislav Hagara | Komentářů: 1
    11.11. 16:44 | Nová verze

    Byl vydán Mozilla Firefox 145.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Ukončena byla podpora 32bitového Firefoxu pro Linux. Přidána byla podpora Matrosky. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 145 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    11.11. 13:33 | IT novinky

    Lidé.cz (Wikipedie) jsou zpět jako sociální síť s "ambicí stát se místem pro kultivované debaty a bezpečným online prostředím".

    Ladislav Hagara | Komentářů: 46
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (47%)
     (18%)
     (18%)
     (23%)
     (15%)
     (23%)
     (16%)
     (16%)
    Celkem 346 hlasů
     Komentářů: 16, poslední včera 18:21
    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: 294×
    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.