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í
×
včera 16:00 | Nová verze

Byl vydán Mozilla Firefox 51.0. Z novinek lze upozornit například na upozorňování na přihlašování přes nešifrované spojení (HTTP), podporu pro přehrávání bezeztrátového formátu FLAC nebo podporu WebGL 2. Podrobné informace v poznámkách k vydání a na stránce věnované vývojářům. Řešeny jsou také bezpečnostní chyby.

Ladislav Hagara | Komentářů: 2
23.1. 17:25 | IT novinky

Do prodeje (Farnell) se dostal jednodeskový počítač Tinker Board (unboxing). Jedná se o konkurenci Raspberry Pi 3 od společnosti Asus. Porovnání (jpg) těchto počítačů například na CNXSoft. Cena Tinker Boardu je 55 £.

Ladislav Hagara | Komentářů: 15
23.1. 14:44 | Zajímavý projekt

Byla zveřejněna pravidla hackerské soutěže Pwn2Own 2017, jež proběhne od 15. do 17. března v rámci bezpečnostní konference CanSecWes ve Vancouveru. Soutěžit se bude o více než milion dolarů v pěti kategoriích. Letos se bude útočit i na Ubuntu. Jedná se již o 10. ročník této soutěže.

Ladislav Hagara | Komentářů: 2
23.1. 13:33 | Nová verze

Po sedmi měsících vývoje od vydání verze 5.7 byla vydána verze 5.8 (YouTube) toolkitu Qt. Z novinek lze zmínit například Qt Lite pro vestavěná zařízení. Nově jsou plně podporovány moduly Qt Wayland Compositor (YouTube) a Qt SCXML (YouTube). Současně byla vydána verze 4.2.1 integrovaného vývojového prostředí (IDE) Qt Creator.

Ladislav Hagara | Komentářů: 1
23.1. 11:52 | Pozvánky

Lednový Prague Containers Meetup se koná ve čtvrtek 26. ledna 2017 od 18:00 v Apiary, Pernerova 49, Praha 8. Přijďte se podívat na přednášky o Enterprise Kubernetes a Jenkins as a code.

little-drunk-jesus | Komentářů: 0
23.1. 11:40 | Pozvánky

Program letošního ročníku konference Prague PostgreSQL Developer Days, která se koná již 15. a 16. února 2017 na ČVUT FIT, Thákurova 9, Praha 6, byl dnes zveřejněn. Najdete ho na stránkách konference včetně anotací přednášek a školení. Registrace na konferenci bude otevřena zítra (24. ledna) v brzkých odpoledních hodinách.

TomasVondra | Komentářů: 0
22.1. 02:20 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, upozorňuje na svém blogu, že nový Inkscape 0.92 rozbíjí dokumenty vytvořené v předchozích verzích Inkscape. Problém by měl být vyřešen v Inkscape 0.92.2 [reddit].

Ladislav Hagara | Komentářů: 0
22.1. 02:02 | Komunita

Øyvind Kolås, hlavní vývojář grafických knihoven GEGL a babl, které využívá grafický program GIMP, žádá o podporu na Patreonu. Díky ní bude moci pracovat na vývoji na plný úvazek. Milník 1000 $, který by stačil na holé přežití, se již téměř podařilo vybrat, dalším cílem je dosažení 2500 $, které mu umožní běžně fungovat ve společnosti.

xkomczax | Komentářů: 12
21.1. 23:54 | Pozvánky

DevConf.cz 2017, již devátý ročník jedné z největších akcí zaměřených na Linux a open source ve střední Evropě, proběhne od pátku 27. ledna do neděle 29. ledna v prostorách Fakulty informačních technologií Vysokého učení technického v Brně. Na programu je celá řada zajímavých přednášek a workshopů. Letos je povinná registrace.

Ladislav Hagara | Komentářů: 0
21.1. 22:11 | Nová verze

Byla vydána verze 1.0.0 emulátoru terminálu Terminology postaveného nad EFL (Enlightenment Foundation Libraries). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (12%)
 (2%)
 (72%)
 (3%)
 (11%)
Celkem 395 hlasů
 Komentářů: 39, poslední včera 19:30
Rozcestník
Reklama

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: 205×
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.