|
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
Navigation:
[Reply to this message]
|