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: 6672x | 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:-)

Legenda jménem Chuck Norris:
-Chuck Norris napočítal do nekonečna. Dvakrát
-Chuck Norris zemřel před 10 lety ale Smrtka neměla odvahu mu to říct
-Chuck Norris umí dělit nulou
-Chuck Norris musí třídit prádlo na tři hromady - bílé, barevné a krvavé
-Kdyz jde Bubák spát, každou noc se podívá pod postel jestli tam není Chuck Norris
-Chuck Norris je častým dárcem krve pro Červený Kříž. Jen ne svojí vlastní.
-Chuck Norris hrál ruskou ruletu s plně nabitou zbraní a vyhrál.
-Když Chuck Norris spadne do vody, nebude mokrý, ale voda bude Chuck Norris.
-Teorie evoluce neexistuje, existuje pouze seznam živočišných druhů, které nechal Chuck Norris přežít.
-Pokud má Chuck Norris zpoždění, čas by měl radši sakra zpomalit.
-Chuck Norris dokáže pálit mravence lupou. V noci.
-Chuck Norris je první človek, který porazil betonovou zeď v tenise.
-Slzy Chucka Norrise léčí rakovinu. Škoda, že nikdy neplakal.
-Na poslední stránce Guinnessovy knihy světových rekordů je malým písmem uvedeno že všechny rekordy drží Chuck Norris, zde uvedení lidé jsou ti co jsou mu nejblíž.
-Nekteří lidé nosí pyjamo se Supermanem. Superman nosí pyjamo s Chuckem Norrisem.
-Nejsou žádné odlišné rasy, jenom země plné lidí, které Chuck Norris zbil do různých odstínů černé, modré a žluté.
-Chuck Norris si v KFC objednal BigMac a dostal ho.
-V Iráku nebyly žadné zbraně hromadného ničení. Chuck Norris žije v Oklahomě.
-Chuck Norris zničil periodickou tabulku prvků protože uznává pouze prvek překvapení

Petr Graubner | ICQ- 264912843, Jabber - pecan27@njs.netlab.cz | RSS | Šlape na miniRS | Styl CoolStyle | Zpracováno za: 0.359s | Počet SQL dotazů ve fóru: 1 | Admin