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.
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
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;
}
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 :)
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.
**Tlustě**
*Kurzíva*
"Odkaz":http://neco.cz nebo http://neco.cz (i www.neco.cz)
/---code php
php kód
\---