Autor | Zpráva | ||
---|---|---|---|
MilanKarkulka Profil |
Vždy když to takto píši, tak se divím, jestli neexistuje lepší řešení?
if($status==1){ $status_slovem="objednano"; } if($status==2){ $status_slovem="doruceno"; } if($status==3){ $status_slovem="nedoruceno"; } if($status==4){ $status_slovem="reklamovano"; } |
||
juriad Profil |
#2 · Zasláno: 3. 10. 2016, 18:41:32
$status_slovem = [1 => "objednano", "doruceno", "nedoruceno", "reklamovano"][$status]; |
||
MilanKarkulka Profil |
Jak se tato metoda jmenuje?
A co kdyby vstupní data byla náhodnější? if($status==aa){ $status_slovem="objednano"; } if($status==bb){ $status_slovem="doruceno"; } if($status==b3){ $status_slovem="nedoruceno"; } if($status==ctyri){ $status_slovem="reklamovano"; } |
||
pcmanik Profil |
MilanKarkulka:
To nieje žiadna metóda jednoducho zápis poľa. Snáď trochu čitateľnejšie a ten index 1 znamená že pole sa čísluje od 1 a nie od 0. $status_slovem = array(1 => "objednano", "doruceno", "nedoruceno", "reklamovano")[$status]; Keby boli dáta náhodnejšie musíš dať každému prvku poľa odpovedajúci index, teda aa => objednano, bb => doruceno... |
||
juriad Profil |
#5 · Zasláno: 3. 10. 2016, 19:03:01
Je to prachobyčejné indexování asociativního pole.
php.net/manual/en/language.types.array.php#example-99 |
||
MilanKarkulka Profil |
#6 · Zasláno: 3. 10. 2016, 19:13:56
Pořád nejsem nějak spokojený s odpovědí. :) Jak by jste tedy napsali něco takovéto?
if($status==1){ echo "objednano"; } if($status==2){ echo "doruceno"; } if($status==3){ echo "nedoruceno"; } if($status==4){ echo "reklamovano"; } |
||
Keeehi Profil |
#7 · Zasláno: 3. 10. 2016, 19:17:25
MilanKarkulka:
„Pořád nejsem nějak spokojený s odpovědí. :) Jak by jste tedy napsali něco takovéto?“ Pořád stejně echo [1 => "objednano", "doruceno", "nedoruceno", "reklamovano"][$status]; |
||
juriad Profil |
echo [1 => "objednano", "doruceno", "nedoruceno", "reklamovano"][$status]; pcmanik: Přímé indexování pole je možné of PHP 5.5, zatímco jeho konstrukce pomocí hranatých závorek jde už od PHP 5.4, tedy tvůj zápis s array() nepředstavuje žádnou výhodu. |
||
smitka Profil |
#9 · Zasláno: 3. 10. 2016, 19:29:35
A nebo postaru:
switch ($status) { case 1: echo "objednano"; break; case 2: echo "doruceno"; break; case 3: echo "nedoruceno"; break; case 4: echo "reklamovano"; break; } Výhoda oproti ifům je, že procházení skončí při první shodě. |
||
pcmanik Profil |
juriad:
Verzia PHP 5.4 je zastaralá a skončila jej podpora, takže nemá zmysel sa ňou zaoberať. Jediné na čo som poukázal je že zápis pomocou array môže byť v kóde prehľadnejší ako len zátvorky - zrejme preto aj vznikla otázka ako sa tá metóda volá. |
||
CZechBoY Profil |
#11 · Zasláno: 3. 10. 2016, 21:17:12
Nebo si můžeš udělat třídu s konstantama tvých stavů a budeš moci používat i porovnání pomocí konstanty někde zvenku.
Nebo si udělat pro ten stav vlastní typ a budeš to mít i oop. class ProductStatus { const OBJEDNANO = 1; const DORUCENO = 2; const NEDORUCENO = 3; const REKLAMOVANO = 4; public function getPossiblePairs() { return array_flip(array_change_key_case((new ReflectionClass(get_called_class()))->getConstants(), CASE_LOWER)); } } |
||
midlan Profil |
#12 · Zasláno: 4. 10. 2016, 11:53:09
Doporučuji se vyvarovat řešení od CZechBoY. Je to nečitelná magie. Kdyby někdo takový projekt pak přebíral, přibylo by mu pak hodně vrásek. Jediné místo, kde bych takový kód akceptoval by byl dobře zdokumentovaný framework.
|
||
abc Profil |
#13 · Zasláno: 4. 10. 2016, 15:49:38
Mě to teda magické nepřijde vůbec. Prostě si vyrobíš jednu parent třídu pro všechny číselníky, tu metodu dáš tam a můžeš takhle používat konstanty všude.
Navíc by měla být ještě statická |
||
CZechBoY Profil |
abc: jj tohle používám v Base* třídě pro číselníky a mám to ve statické metodě. Kradeš mi zdrojáky? :D
|
||
Časová prodleva: 8 let
|
0