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:00 | Bezpečnostní upozornění

    Výrobce hardwarových kryptoměnových peněženek Trezor upozorňuje na bezpečnostní incident u společnosti Brevo, kterou využívá k odesílání newsletterů. Útočník na e-mailové adresy odeslal phishingový e-mail.

    Ladislav Hagara | Komentářů: 0
    dnes 14:33 | Komunita

    Clement "Clem" Lefebvre publikoval souhrn dění v Linux Mintu za srpen 2026. Aplikace XApp mají vlastní webovou stránku xapp-project.org. Představena byl čtečka EPUB s názvem Xepub a kalendář Clockenstein.

    Ladislav Hagara | Komentářů: 0
    dnes 11:44 | Nová verze

    Byla vydána nová verze 3.2.6 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

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

    Bylo vydáno Ubuntu 24.04.5 LTS, tj. páté opravné vydání Ubuntu 24.04 LTS s kódovým názvem Noble Numbat. Přehled novinek a oprav na poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | Komunita

    Švýcarsko testuje přechod z Microsoft 365 na FOSS, konkrétně balík openDesk (Wikipedie) od německé státní společnosti ZenDiS (Wikipedie), s cílem posílit digitální suverenitu.

    Ladislav Hagara | Komentářů: 9
    dnes 04:22 | Komunita

    V italském městě Pordenone probíhá LibreOffice Conference 2026. Zúčastnit se lze i online.

    Ladislav Hagara | Komentářů: 0
    včera 18:33 | Nová verze

    Svobodný (GPLv3) šachový engine Stockfish (Wikipedie) byl vydán ve verzi 19 (𝕏). Přehled novinek v příspěvku na blogu. Stockfish 19 je o 44 Elo silnější než Stockfish 18.

    Ladislav Hagara | Komentářů: 0
    včera 12:33 | Nová verze

    Byla vydána nová verze 1.13.0 dynamického programovacího jazyka Julia (Wikipedie) určeného zejména pro vědecké výpočty. Přehled novinek v příspěvku na blogu a v poznámkách k vydání. Aktualizována byla také dokumentace.

    Ladislav Hagara | Komentářů: 0
    včera 11:11 | Pozvánky

    Organizátoři konference LinuxDays zveřejnili program letošního ročníku a spustili registraci návštěvníků. LinuxDays 2026 se uskuteční 3. a 4. října v areálu ČVUT v pražských Dejvicích, na Fakultě informačních technologií. Těšit se můžete na 70 přednášek a workshopů od 66 přednášejících. Konference bude rozdělena do pěti sálů s různou kapacitou. Vstup na LinuxDays je jako obvykle zdarma, stačí včas vyplnit registrační formulář. Opět je možné si na akci zakoupit oběd, ale je třeba to udělat předem, na místě už to nebude možné.

    Petr Krčmář | Komentářů: 0
    včera 11:00 | Nová verze

    Google Chrome 153 byl prohlášen za stabilní. Nejnovější stabilní verze 153.0.8010.36 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 230 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (4%)
     (21%)
     (29%)
     (7%)
     (5%)
     (2%)
     (14%)
     (21%)
    Celkem 2646 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    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: 544×
    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.