Návratový typ funkce

Nezahrávejte si s návratovými hodnotami a vracejte je dobře.

V php může funkce jednou vrátit string, podruhé zase array. Nikdo ji nenutí k žádné poslušnosti. Datová volnost ale není vždy zárukou krácení kódu. Chci říct, že někdy to pěkne nakrkne. Pro příklad si vezmu třeba metodu pro vracení výsledků SQL dotazu.

$table = new Foo;
$result = $table->fetchAll();

Pokud jsou v tabulce Foo záznamy, tak fetchAll vrátí pole záznamů. Pokud neobsahuje ani jeden záznam, tak se vrátí NULL. A teď jak to komplikuje situaci? No hodně, nejčastější krok po výběru z databáze je procházení záznamů.

$table = new Foo;
$results = $table->fetchAll();
foreach($results as $result){
 echo $result->id;
}

Pokud bude $results NULL, tak nám script pěkně havaruje a to přece strašně chceme. Takže začneme problém řešit.

Jako první by se dalo použít

$table = new Foo;
$results = $table->fetchAll();

if(!is_array($results)){
 die();
}

foreach($results as $result){
 echo $result->id;
}

Strašně elegantní že? Asi nejlepší řešení které mě napadlo je přetypovat návratovou hodnotu.

$table = new Foo;
$results = (array)$table->fetchAll();

foreach($results as $result){
 echo $result->id;
}

Ale pořád je psaní navíc. Proto pokud funkce která vrací pole by měla pole vracet i za špatného počasí. Takže pokud navrhujete funkci, mějte na paměti tento problém.

Autorem tohoto článku je Petr Čada.


<Starší | tento článek | Novější>

Napsáno: 14. 3. 2008, 15:33 | Přečteno: 6664x | Kategorie: PHP School | Napsal: error414 |
Komentáře: 6
.:. sodae | www | mail

Tak čtu , no , pro mě to není tak přínosné :D , Až na ten poslední , že to přenese. Jinak přidám jak udělat z promene array :-)

$string = "array nebo promena";
if(!is_array($string)){
  $string = array($string); // zde se udělá z normalní proměné array
}
// potom neni problem udělat foreach
foreach($string as $promena_v_foreach){ // popripade $promena_v_foreach =>$promena_v_foreach_sub
  echo $promena_v_foreach;
}

Jinak bys mohl „mládátkám“ vysvětlit Petře jak pracuje foreach a třídy (class) a stímto chci jen říct , takovou maličkost. Ze pracuji na frameworku s názvem Glep

Odpověď | 2008-03-19 18:42:57

jak pracuje foreach a OOP je vsude popsane, a jednoduchou tridu si napise snad kazdy po dennim studiu.

Zajimalo by me proc testujes jestli promena $string neni pole? podle me je to zbytecne.

ja bych to napsal

$string = "array nebo promena";


// potom neni problem udělat foreach
foreach((array)$string as $promena_v_foreach){ // popripade $promena_v_foreach =>$promena_v_foreach_sub
  echo $promena_v_foreach;
}
Odpověď | 2008-03-19 23:19:23

No osobně si myslím že jakéhokoliv přetypování je lépe se vyhnout :)) a o testovat podmínkami a v případě stringu vyřešit jiným příkazem než foreach :)

Odpověď | 2008-04-19 08:50:45

spíše si myslím že zde děláš reklamu

Odpověď | 2008-03-20 07:16:11
.:. sodae | www | mail

error414: jen pro ukázku , ne ? :-) , je to tvuj styl

pavel: hej ty si myslís že dělám reklamu ? , brr , tak to zabrzdi , s peCanem jsme staří známí (on ví jak to myslím). A když člověk ukáže své dílo že je hřích ?! tak to brr.

Odpověď | 2008-03-20 15:11:23 | Příspěvek upraven: 2008-03-20 15:12:12

no ono to trošku tak vyznělo

2008-03-21 07:13:26
Přidej komentář
Jméno
Web
Mail
Kontrola Zadejte číslo pět
Text

:-)
:-D
:-(
|-/
:-[]
;-)
8-|
8-o
Zde formátuje Texy! (syntaxe)
  • Příklad formátování příspěvku:

    **Tlustě**
    *Kurzíva*
    "Odkaz":http://neco.cz nebo http://neco.cz (i www.neco.cz)
    /---code php
    php kód
    \---

  • Pro odeslání zprávy můžete použít klávesovou zkratku Alt+S. (Podporují jen některé prohlížeče)
  • HTML znaky budou převedeny na entity.
  • Vyjadřujte se tu jako doma, ať víme jak to u Vás vypadá.
  • Odkazy začínající http:// budou automaticky převedeny na odkazy , nepoužívejte však v jednom příspěvku více jak 3 - to dělají jen spam roboti:-)
Když žena přijde ráno domů a řekne muži, že spala u nejlepší kámošky, co udělá muž? Obvolá všech deset kámošek a zjistí, že ani u jedné nespala. Když muž přijde ráno domů a řekne ženě, že spal u nejlepšího kamaráda, co udělá žena? Obvolá všech deset kamarádů a zjistí, že spal u osmi z nich a u dvou ještě pořád je.
Petr Graubner | ICQ- 264912843, Jabber - pecan27@njs.netlab.cz | RSS | Šlape na miniRS | Styl CoolStyle | Zpracováno za: 0.171s | Počet SQL dotazů ve fóru: 1 | Admin