| Posted by Paul Lautman on 01/09/07 14:57 
J.O. Aho wrote:> Paul Lautman wrote:
 >> J.O. Aho wrote:
 >>> Paul Lautman wrote:
 >>>> I have the following switch statement:
 >>>>
 >>>> switch ($record->sub_page) {
 >>>>    case -1:
 >>>>      $this->page = 6;
 >>>>      $error_message = '<center>You appear to have already completed
 >>>> the form.</center>';
 >>>>      break;
 >>>>    case 0:
 >>>>      $this->page = 5;
 >>>>      ff_query("UPDATE #__gateway_form_1 SET `sub_page`=-1 WHERE
 >>>> userid=$my->id and `expiry_date` = '$expiry_date'");
 >>>>      break;
 >>>>    default:
 >>>>      do something else
 >>>> }
 >>>>
 >>>> The value of $record->sub_page can be NULL. If it is NULL, the case
 >>>> for 0 seems to fire. I really need the default action to happen
 >>>> when $record->sub_page is NULL or a +ve value.
 >>>>
 >>>> However if I do:
 >>>>
 >>>> switch ($record->sub_page) {
 >>>>    case -1:
 >>>>      $this->page = 6;
 >>>>      break;
 >>>>    case NULL:
 >>>>      do something else;
 >>>>      break;
 >>>>    case 0:
 >>>>      $this->page = 5;
 >>>>      break;
 >>>>    default:
 >>>>      do something else;
 >>>> }
 >>>>
 >>>> then the switch manages to tell the difference between a NULL and a
 >>>> zero. Is it correct that php treats NULL as 0?
 >>>> Can anyone suggest a good fix?
 >>> NULL and 0 are many times treated as false, so you do need to take
 >>> care of things and check NULL/0/false.
 >>
 >> But I need the default action to happen if $record->sub_page is NULL.
 >>
 >> If I test for NULL before testing for 0 then all is detected fine.
 >> However if I test for NULL after testing for 0 then it fires the 0
 >> action when it sees NULL. I don't really want to copy the default
 >> actions to the NULL actions too.
 >>
 >>
 > This should work, you set 0 as the next last option in the switch and
 > default as last (as it should), then checking for null in the case 0
 > should allow you to distinguish it from NULL.
 >
 > switch($something) {
 >
 >  case 0:
 >      if(!is_null($something)) {
 >         /* do what you need for 0 */
 >       break;
 >      }
 >      /* No break for NULL we go automatically to the next one */
 >  default:
 >     break;
 > }
 
 Hey, I like it! Thanks
 [Back to original message] |