Autor | Zpráva | ||
---|---|---|---|
Martínek Profil * |
#1 · Zasláno: 8. 8. 2011, 00:37:23
Ahoj,
jak tohle jde napsat líp, není to už prasárna? :) <input ....... '.($row == 1 ? 'green' : ''.($row == 2 ? 'red' : ''.($row == 3 ? 'blue' : '').'').'').'.... /> Díky PS: ještě jeden dotaz proč tohle funguje ....($row == 1 ? 'green' : '')..... a tohle ne ....($row == 1 ? 'green')..... Díky |
||
Majkl578 Profil |
#2 · Zasláno: 8. 8. 2011, 00:42:21 · Upravil/a: Majkl578
Je víc možností.
První: if ($row == 1) { $color = 'green'; } elseif ($row == 2) { $color = 'red'; } elseif ($row == 3) { $color = 'blue'; } else { $color = ''; } echo '<input ....... ' . $color . '.... />'; Druhá: $colors = array( 1 => 'green', 2 => 'red', 3 => 'blue', ); echo '<input ....... ' . (isset($colors[$row]) ? $colors[$row] : '') . '.... />'; Třetí je třeba switch a určitě by se našly další. |
||
php Profil * |
#3 · Zasláno: 8. 8. 2011, 00:45:28
Já bych doporučil switch už jen proto, že je o dvě třetiny rychlejší než if a hlavně dá se tam nastavit defaultní hodnota, což v poli neuděláš.
|
||
Martínek Profil * |
#4 · Zasláno: 8. 8. 2011, 00:46:15
Majkl578:
Nemyslím normální podmínky, ale zkrácené, pak píšu 5 podmínek a kód je to na 100 řádků místo 10 řádků ;) Díky |
||
Majkl578 Profil |
#5 · Zasláno: 8. 8. 2011, 00:48:06
[#3] php:
To by mě zajímalo, kde jsi k té informaci přišel. Jsou totiž téměř stejně rychlé. A u if jde samozřejmě defaultní hodnota taky, větví else .
|
||
php Profil * |
#6 · Zasláno: 8. 8. 2011, 00:56:02
Osobně si myslím, že používání zkrácených zápisů není moc dobrý.
1)Když pak totiž někdo ten kód po tobě potřebuje upravit, tak s tím je spousta práce. 2)Pak taky ten tvůj první zápis <input ....... '.($row == 1 ? 'green' : ''.($row == 2 ? 'red' : ''.($row == 3 ? 'blue' : '').'').'').'.... /> je dokonce pomalejší než funkce if 3)Kdybys k tomu dělal dokumentaci tak bude hodně nepřehledná, díky těmhle zkráceným zápisům. 4)Když zkrácený zápisy tak opravdu jen ty nejjednodušší ( if($i++%2) ) 5)Když si někde takhle nahuštěný kód někam uložíš a po nějakém čase se k němu zase vrátíš, tak sám budeš mít problémy mu porozumět. |
||
TomášK Profil |
#7 · Zasláno: 8. 8. 2011, 00:56:05
php:
Nejrychlejší bude skoro určitě to pole, ale nepředpokládám, že by to někdo použil na takový počet hodnot, aby to bylo vůbec měřitelné. Defaultní hodnotu tam uděláš pomocí isset, dokonce je v Majklově578 kódu. |
||
php Profil * |
#8 · Zasláno: 8. 8. 2011, 00:59:28
Majkl578:
„A u if jde samozřejmě defaultní hodnota taky, větví else.“ Nechci se hádat ale asi sis nepřečet poslední vedlejší větu, ta defaultní hodnota byla myšlena k $colors = array( 1 => 'green', 2 => 'red', 3 => 'blue', );..... a kde sem přišel k těm dvou třetinám? - praxí |
||
Majkl578 Profil |
#9 · Zasláno: 8. 8. 2011, 01:03:25 · Upravil/a: Majkl578
php:
Ternární operátor pomalejší je, ale standardní větvení ne. „asi sis nepřečet poslední vedlejší větu“ Nejspíš. Nicméně i v poli tohoto charakteru by šlo defaultní hodnotu uvést (víme-li, že klíče jsou číselné), třeba takto: $colors = array( 1 => 'green', 2 => 'red', 3 => 'blue', 'default' => '', ); (isset($colors[$row]) ? $colors[$row] : $colors['default']) |
||
php Profil * |
#10 · Zasláno: 8. 8. 2011, 01:21:57
$x = null; $start = microtime(); if ( $x == null ){ echo "if time: "; } else{ echo "if time: "; } $end = microtime(); $result = $end-$start; echo $result; $start = microtime(); switch ( $x ){ case null: echo "switch time:"; break; default: echo "switch time:"; } $end = microtime(); $result = $end - $start; echo $result; a výsledek: if time: 2.6999999999999E-5switch time:8.9999999999812E-6 v tomhle případě je switch téměř 10x rychlejší…, ale záleží i na spoustě jiných věcí, ať už na verzích softwaru na serveru tak jeho HW, ale každému sedí něco jiného a switch se taky nedá použít všude a ve většině případů je i zbytečný jej používat. Každopádně co mám tak zkušenosti, tak v průměru mi to vychází opravdu tak o ty dvě třetiny, samozřejmě neměří všechno. Skutečnost může být jiná, jak tvrdíš, asi sem měl zrovna štěstí na velký rozdíly. :) |
||
php Profil * |
#11 · Zasláno: 8. 8. 2011, 01:25:59
matika bez kalkulačky mi moc nejde, takže se opravuju z 10x na 3x :)
|
||
TomášK Profil |
#12 · Zasláno: 8. 8. 2011, 04:21:53
php:
Tenhle benchmark můžeš rovnou zahodit, měříš příliš krátké úseky a jak říkáš, záleží na spoustě jiných věcí - kolik na ten program vyjde strojového času, jak dlouho čeká na paměť apod. Zkoušel jsem ho a vrací řádově jiná čísla při po sobě jdoucích bězích, rychlejší je většinou to, co je ve skriptu jako první, bez ohledu na to, jestli to je if nebo switch. |
||
Časová prodleva: 13 let
|
0