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 10:55 | Nová verze

    Byla vydána verze 9.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a informačním videu.

    Ladislav Hagara | Komentářů: 0
    dnes 09:33 | IT novinky

    Firefox 151 podporuje Web Serial API. Pro komunikaci s různými mikrokontroléry připojenými přes USB nebo sériové porty už není nutné spouštět Chrome nebo na Chromiu postavené webové prohlížeče.

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

    Byla vydána nová stabilní verze 8.0 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 148. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 21:33 | Bezpečnostní upozornění

    Ve FreeBSD byla nalezena a opravena zranitelnost FatGid aneb CVE-2026-45250. Jedná se o lokální eskalaci práv. Neprivilegovaný uživatel se může stát rootem.

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

    Společnost Flipper Devices oznámila Flipper One. Zcela nový Flipper postavený od nuly. Jedná se o open-source linuxovou platformu založenou na čipu Rockchip RK3576. Hledají se dobrovolníci pro pomoc s dokončením vývoje (ovladače, testování, tvorba modulů).

    Ladislav Hagara | Komentářů: 2
    včera 14:00 | Nová verze

    Vývojáři Wine oznámili vydání verze 2.0 knihovny vkd3d pro překlad volání Direct3D na Vulkan. Přehled novinek na GitLabu.

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

    Společnost Red Hat oznámila vydání Red Hat Enterprise Linuxu (RHEL) 10.2 a 9.8. Vedle nových vlastností a oprav chyb přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Vypíchnout lze CLI AI asistenta goose. Podrobnosti v poznámkách k vydání (10.2 a 9.8).

    Ladislav Hagara | Komentářů: 0
    včera 05:11 | Nová verze

    Organizace Apache Software Foundation (ASF) vydala verzi 30 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 05:00 | Nová verze

    Byla vydána nová verze 7.0 svobodného open source redakčního systému WordPress. Kódové jméno Armstrong bylo vybráno na počest amerického jazzového trumpetisty a zpěváka Louise Armstronga (What A Wonderful World).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Bezpečnostní upozornění

    V Drupalu byla nalezena a opravena kritická zranitelnost SA-CORE-2026-004 (CVE-2026-9082). Útočník může provádět libovolné SQL dotazy na webech používajících databázi PostgreSQL.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (13%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (6%)
     (3%)
     (16%)
     (26%)
    Celkem 1678 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    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: 318×
    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.