Portál AbcLinuxu, 19. dubna 2024 03:44


Dotaz: Problém s vrácením dat z class v php

22.11.2013 00:54 David
Problém s vrácením dat z class v php
Přečteno: 782×
Odpovědět | Admin
Ahoj. Chtěl bych se zeptat, když v metodě uvnitř třídy "class1" mám return new class2(), a class2() mi vrací data pomocí __toString(), tak vše funguje, jenže pokud potřebuji jít dál, a uvnitř class2() dám return new class3() tak přesto že vracím zase v class3() data pomocí __toString(), do class1 se už nedostanou. Poradí někdo?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.11.2013 05:47 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Odpovědět | | Sbalit | Link | Blokovat | Admin
Stačí s tím objektem zacházet jako se stringem, například zřetězit s prázdným stringem.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Tarmaq avatar 22.11.2013 09:26 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Anebo pouzit strval(). Vysledek by mel vypadat nejak takhle:
class class2
{
  private $foo;
  function __construct()
  {
    $this->foo = new class3;
  }
  function __toString()
  {
    return strval($this->foo);
  }
}
Don't panic!
22.11.2013 09:55 David
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Zrovna tady jsem se dočetl, že tvé řešení není "správné". Metoda __toString() nemá vracet proměnné ale má volat metody :-( A řádek private $foo; tam taky nemá být... Tak jak to tedy opravdu je?

PS: Jak amatér s rozbitou držkou domů se vrátil, když učil orla létat :-D
22.11.2013 10:20 Kit
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Četl jsi to ze špatného zdroje a navíc jsi to i špatně pochopil.
22.11.2013 10:24 David
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
No na 99% jsi to psal ty, nemůžu to teď najít..
Tarmaq avatar 22.11.2013 10:26 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
tusim ze mas na mysli tohle, je to tak?
Don't panic!
22.11.2013 12:09 David
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
tusim ze mas na mysli tohle, je to tak?
Ano, tam jsem to četl...
Tarmaq avatar 22.11.2013 12:16 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
A muzes tedy citovat? Nebo zkopirovat Link daneho prispevku a vlozit ho sem?
Don't panic!
22.11.2013 12:26 David
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Sorry to není ono, ale to jsem taky četl, bylo tam něco ve smyslu, že proměnné v class nejsou uložiště a tak by měli vracet přímo výsledek a být volány až když jsou potřeba. A ty proměnné když nejsou definovány tak se tam nepíšou. Ale četl jsem toho hodně a nevím kde to bylo a mimo jiné tohle mi uvízlo v hlavě...
22.11.2013 12:50 Kit
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Zdá se, že jsi tu větu vytrhl z kontextu. Zřejmě jsem někde psal o anemickém doménovém modelu, který z objektu dělá úložiště. Možná jsi to zkombinoval s jiným mým výrokem o normalizaci třídy, že její instanční proměnné by neměly být konglomeráty, ale atomické hodnoty, které se v metodě __toString() teprve spojí do požadovaného výstupu.
Josef Kufner avatar 22.11.2013 12:02 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
__toString vrací vždy obyčejný string. Jak k němu dojde, je celkem jedno, jen by ta metoda neměla mít žádné side effecty, tedy jedno zavolání a libovolný počet zavolání musí vyjít nastejno.

Ten kousek kódu je dobře, jen by místo strval bylo lepší použít přetypování na string: return (string) $this->foo;
Hello world ! Segmentation fault (core dumped)
Tarmaq avatar 22.11.2013 12:18 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Ten kousek kódu je dobře, jen by místo strval bylo lepší použít přetypování na string: return (string) $this->foo;
Mohl bys prosim nejak podlozit, v cem je to lepsi? IMHO obe veci delaji uplne tu samou vec. Spis je to o osobnich preferencich.
Don't panic!
Josef Kufner avatar 22.11.2013 12:29 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Rozdíl je v rychlosti. Přetypování ušetří volání funkce a výsledek je přitom zcela stejný. Pokud by to bylo v nějaké často používané funkci, což docela často bývá případ různých pomocných formátovacích udělátek, může to zvednout výkon aplikace o pár procent.
Hello world ! Segmentation fault (core dumped)
Tarmaq avatar 22.11.2013 12:30 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Vlastne existuje duvod pro pouziti strval() misto (string). Je hned na prvni pohled jasne, co je castovano a clovek tak nemusi resit napr. precedenci operatoru..
Don't panic!
Josef Kufner avatar 22.11.2013 12:34 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Důvod, proč strval existuje, je funkce array_map a jí podobné.

"strval(blabla)" a "(string)(blabla)" vyjde z pohledu čitelnosti i náročnosti psaní úplně na stejno.
Hello world ! Segmentation fault (core dumped)
22.11.2013 12:52 potato
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Z pohledu čitelnosti je zápis jako volání funkce určitě lepší. Je v kódu
(a)(b)(c)
- a i b typ, c proměnná

- a typ, b funkce, c proměnná

- a funkce vracející funkci, b funkce, c proměnná

nebo je to ještě nějak jinak?
22.11.2013 15:22 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php

Ej, to je extrém pomíjející fakt, že máme máme nějaké základní typy, klíčová slova apod. a že uživatelské typy také pojmenováváme dle nějakých zásad.

Osobně klasické přetypování ve stylu 'C' je pro mně to nejčitelnější (, co přesně dělá interpret PHP u jednotlivých zápisů nevím).

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Josef Kufner avatar 22.11.2013 17:08 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Problém s vrácením dat z class v php
Před proměnné se píše dolar, takže to je trošku jednodušší. Navíc podpora anonymních funkcí v PHP je taková trošku polovičatá, takže si s tímhle neporadí ani samotný interpret. Tenhle zápis je jedině trojité přetypování (PHP 5.3 a starší, jaké novinky jsou v PHP 5.5 jsem nezkoumal moc podrobně, ale prý se to trochu zlepšilo).
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.