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 17:00 | Pozvánky

    Soutěž amatérských robotů Robotický den 2023 proběhne v neděli 4. června v Kongresovém centru Praha.

    Ladislav Hagara | Komentářů: 0
    dnes 14:11 | IT novinky

    V Tchaj-peji probíhá počítačový veletrh COMPUTEX 2023. Firmy představují své novinky. Nvidia například superpočítač DGX GH200 AI.

    Ladislav Hagara | Komentářů: 2
    dnes 12:11 | Nová verze

    Vyšla nová verze XMPP (Jabber) klienta Gajim. Nejvýznamnější novinkou je integrace OMEMO pluginu přímo do jádra aplikace, takže již není třeba plugin samostatně instalovat. Přehled dalších novinek je dostupný na oficiálních stránkách. Gajim je vytvořen v jazyce Python s využitím knihovny GTK a vedle Linuxu jej lze vyzkoušet i na platformách MacOS a Windows.

    sonicpp | Komentářů: 0
    včera 22:22 | Komunita

    Komunita KDE představila stránku KDE for Developers pro vývojáře používající KDE aplikace. Postupně byly představeny stránky pro umělce KDE for Creators, děti KDE for Kids a vědce KDE for Scientists.

    Ladislav Hagara | Komentářů: 5
    včera 16:00 | IT novinky Ladislav Hagara | Komentářů: 0
    28.5. 22:00 | IT novinky Ladislav Hagara | Komentářů: 0
    28.5. 13:55 | Komunita

    Na itch.io probíhá Linux Game Jam 2023. Zapojit se a přihlásit hru běžící na Linuxu lze do 6. června do 01:59. Zahrát si lze hry z loňského ročníku.

    Ladislav Hagara | Komentářů: 3
    27.5. 18:55 | IT novinky

    Na Steamu lze získat zdarma počítačové hry Warhammer 40,000: Gladius - Relics of War a Hue. Na Epic Games Storu počítačovou hru Fallout: New Vegas - Ultimate Edition.

    Ladislav Hagara | Komentářů: 10
    26.5. 08:00 | Komunita

    WordPress (Wikipedie), open source systém pro správu webového obsahu (CMS), zítra slaví 20 let. První verze byla vydána 27. května 2003.

    Ladislav Hagara | Komentářů: 47
    25.5. 21:44 | Nová verze

    Deno (Wikipedie), běhové prostředí (runtime) pro JavaScript, TypeScript a WebAssembly, bylo vydáno ve verzi 1.34. Přehled novinek v poznámkách k vydání. Od verze 1.6 lze pomocí "deno compile" sestavit ze zdrojových kódů binární spustitelný soubor. Nově "deno compile" podporuje také npm balíčky.

    Ladislav Hagara | Komentářů: 9
    Obnovovací frekvenci obrazovky (LCD) preferuji
     (73%)
     (21%)
     (4%)
     (2%)
    Celkem 788 hlasů
     Komentářů: 13, poslední 25.5. 07:25
    Rozcestník

    Dotaz: Problem s výstupem z class v php

    8.8.2013 13:42 Venda
    Problem s výstupem z class v php
    Přečteno: 231×
    Ahoj, mám dvě třídy s názvy Aaa a Bbb. (Ve tříde Aaa vytvořím instanci třídy Bbb).

    Třída Aaa
    class Aaa {
      private $aaa;
      public function __construct() {
      $this->aaa = new Bbb();
     }
    
     function __toString() {
      return $this->aaa;
     }
    }
    
    Třída Bbb
    class Bbb {
      private $bbb;
      public function __construct() {
      $this->bbb = 'Výsledek';
     }
    
     function __toString() {
      return $this->bbb;
     }
    }
    Vytvořím instanci třídy Aaa ale dostanu chybu!
    echo new Aaa(); // Method Aaa::__toString() must return a string value
    Zjistil jsem, že když ve tříde Aaa opravím řádek
    $this->aaa = new Bbb();
    za
    $this->aaa .= new Bbb();
    tak to funguje. Proč tomu tak je však nedokážu nějak pochopit, vždyť nic nespojuji, tak proč tečka? Poradí někdo? Děkuji

    Odpovědi

    Tarmaq avatar 8.8.2013 13:58 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Vsak to mas v popisu chyby, metoda __toString() musi vracet string. Takze v tride Aaa predelej metodu __toString() takto:
     function __toString() {
      return strval($this->aaa);
     }
    
    Don't panic!
    8.8.2013 14:01 Venda
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Ale to není odpověď na mou otázku, pořád nevím, proč tečka ovlivňuje jestl bude výstup objekt nebo string, tohle bych potřeboval objasnit. Děkuji
    Tarmaq avatar 8.8.2013 14:19 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    ty nevis jaky je rozdil mezi operatorem = a .=? Prvni je prirazeni, druhy je zkraceny zapis concatenace stringu.
    $this->aaa .= new Bbb();
    
    by se tedy dalo zapsat take takto:
    $this->aaa = $this->aaa . new Bbb();
    
    No a pri concatenaci dochazi k prevodu na string, takze se na instanci new Bbb() zavola metoda __toString()
    Don't panic!
    8.8.2013 15:00 Venda
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Jenže já v $this->aaa nic jiného krom výsledku ze třídy Bbb() nemám, tudíž nerozumím proč mám spojovat prázdný řetězec, kdyby $this->aaa obsahovala ještě nějaká data ve své třídě new Aaa() tak to chápu ale takto ne. Díky
    Tarmaq avatar 8.8.2013 15:39 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Co to je "vysledek z tridy"? V $this->aaa nemas zadny vysledek, mas tam instanci tridy Bbb. Metoda __toString() se vola jen v pripade, ze je potreba z te instance udelat string.
    Don't panic!
    8.8.2013 15:56 axel
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Co dela tecka si objasni v libovolnem tutorialu PHP. Metodou nekam napisu treba tecku a uvidim, jestli mi to nahodou nezacne "fungovat", se nikam nedostanes. Kdyz das do promenne instanci tridy, je v ni instance tridy. Kdyz tam das string (napr. ziskany volanim __toString na instanci), je tam string. To je zcela elementarni a pokud to nechapes, opet se vrat k libovolnemu tutorialu PHP.
    8.8.2013 15:54 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php

    Musíš nějak vynutit konverzi na řetězec a pomocí .= jsi provedl $this->aaa = $this->aaa . new Bbb();.

    Já mám otázku: »Co vás lidi, tedy fčul Tebe, prosím Tě vede k tomu to používat takto (používat __toString())?«
    To se musí někde líhnout tyto nápady a musí to mít nějaký důvod :).

    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    8.8.2013 17:06 Venda
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Když __toString() nepoužiju, tak jak dostanu výsledek co vytvoří ta class?

    Příklad
    class Aaa {
      private $aaa;
      public function __construct() {
      $this->aaa = false;
      $this->aaa .= '<ul>';
      $this->aaa .= '<li>aaa</li>';
      $this->aaa .= '<li>bbb</li>';
      $this->aaa .= '<li>ccc</li>';
      $this->aaa .= '</ul>';
     }
    }
    
    $aaa = new Aaa();

    echo $aaa;
    8.8.2013 17:22 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php

    A k čemu je taková třída?

    Dobře, bude to „výkonná“ třída:

    <?php
    class Aaa {
      static public function getListStatic() {
        $o  = '
      '; $o .= '
    • aaa
    • '; $o .= '
    • bbb
    • '; $o .= '
    • ccc
    • '; $o .= '
    '; return $o; } public function getList() { $o = '
      '; $o .= '
    • aaa
    • '; $o .= '
    • bbb
    • '; $o .= '
    • ccc
    • '; $o .= '
    '; return $o; } }; echo Aaa::getListStatic(),"
    \n"; $o = new Aaa(); echo $o->getList(),"
    \n";

    PS: Neplatanl bych bool a string jen tak bezdůvodně…
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    8.8.2013 17:26 Venda
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Tohle je mi jasný, ale jak to udělám s použitím __constructor() ? Díky
    Tarmaq avatar 8.8.2013 17:41 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    class Aaa
    {
      private $o;
      public function __construct()
      {
        $this->o  = '
      '; $this->o .= '
    • aaa
    • '; $this->o .= '
    • bbb
    • '; $this->o .= '
    • ccc
    • '; $this->o .= '
    '; } public function getList() { return $this->o; } }; $o = new Aaa(); echo $o->getList(),"
    \n";
    U staticke varianty se konstruktor nevola, konstruktor se vola pri instanciaci..
    Don't panic!
    8.8.2013 17:47 Venda
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    Ale zase musím volat metodu, proto jsem tam dal __toString() a nemusím už nic volat, vytvořim instanci v proměnné $o a zrovna v ní mám zpracované data z class.
    $o = new Aaa();
    echo $o; 
    # Výsledek
    aaa
    bbb
    ccc
    
    
    Tarmaq avatar 8.8.2013 17:56 Tarmaq | skóre: 39
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    No a kde je teda problem? Tohle ti nestaci?
    Don't panic!
    8.8.2013 18:23 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Problem s výstupem z class v php
    PS: Stejně se metoda volá, nic jsi neušetřil, jen si to komplikuješ….
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

    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.