Autor | Zpráva | ||
---|---|---|---|
Hologos Profil |
#1 · Zasláno: 25. 6. 2011, 16:01:13
Zdravím,
nejdříve kus kódu: class Message { const OK = 'everything is ok'; const NOT_OK = 'something is wrong'; const UNABLE_TO_RECEIVE_RESPONSE = 'unable to receive response'; public function send($code) { // TEST sendMessage($code); } } Problém mám s tím, jak udělat test, zda-li parametr $code je jeden z těch předdefinovaných konstant. Chtěl bych to nějak elegantně, ale napadlo mě jen toho hnusné: class Message { const OK = 0; const NOT_OK = 1; const UNABLE_TO_RECEIVE_RESPONSE = 2; private $messages = array( 0 => 'everything is ok', 1 => 'something is wrong', 2 => 'unable to receive response' ); public function send($code) { if($code < 0 && $code > 2) throw new Exception('...'); sendMessage($code); } } Jenže je to hůře rozšiřitelné. Když budu chtít přidat/smazat/změnit pořadí, musím si dát pozor na kontrolu rozsahu, prohodit to v tom poli, atp. A to je prostě hnus. Kdyby to byly proměnné, mohl bych využít get_class_vars(get_class($this)) a to pak porovnat. Ale pro konstanty jsem nic takového nenašel. Nenapadá někoho něco? Díky |
||
Majkl578 Profil |
#2 · Zasláno: 25. 6. 2011, 16:09:30 · Upravil/a: Majkl578
Kontrolu existence třídní konstanty by šlo provést pomocí
defined :
defined(__CLASS__ . '::' . $name); constant :
constant(__CLASS__ . '::' . $name) Pro kontrolu, jestli hodnota je rovna některé z hodnot konstant, by se asi hodila Reflexe: $ref = new ReflectionClass('Foo'); in_array($value, $ref->getConstants()); |
||
Hologos Profil |
#3 · Zasláno: 25. 6. 2011, 16:17:57 · Upravil/a: Hologos
Budu si muset něco přečíst o reflexi, abych věděl, o čem je řeč.
Zatím použiji to constant(__CLASS__ . '::' . $name) Díky moc. // Tak už vím, o co jde, díky moc. |
||
Časová prodleva: 14 let
|
0