#18680 [Fbk->Opn]: Logical OR fails if value is a string

From: Date: Thu, 01 Aug 2002 19:22:01 +0000
Subject: #18680 [Fbk->Opn]: Logical OR fails if value is a string
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-15762@lists.php.net to get a copy of this message
ID: 18680 User updated by: su-php@bossi.com -Summary: Logical OR fails after value passes through session Reported By: su-php@bossi.com -Status: Feedback +Status: Open -Bug Type: Session related +Bug Type: Strings related Operating System: Win2K PHP Version: 4.1.2 New Comment: It is not a session related problem, but a string conversion problem. Below is a script which shows the problem. When doing test, remember that the values should be based on a power of two, that is: 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, ... ------------------------- <html><head></head><body> <h1>ORing Values</h1> <? do_table( 1, '1', 8, '8' ); do_table( 2, '2', 8, '8' ); do_table( 2, '2', 4, '4' ); do_table( 2, '2', 16, '16' ); do_table( 1, '1', 16, '16' ); ?> </body></html> <? function do_table( $val_1_num, $val_1_txt, $val_2_num, $val_2_txt ) { ?> <br> <table border="1"> <tr> <th></th> <th>Value 1</th> <th>Value 2</th> <th>Raw OR</th> <th>strval OR</th> <th>0+ OR</th> </tr> <tr> <td>Number</td> <td align="center"><?= $val_1_num ?></td> <td align="center"><?= $val_2_num ?></td> <td align="center"><?= $val_1_num | $val_2_num ?></td> <td align="center"></td> <td align="center"><?= (0 + $val_1_num) | (0 + $val_2_num) ?></td> </tr> <tr> <td>Text</td> <td align="center"><?= $val_1_txt ?></td> <td align="center"><?= $val_2_txt ?></td> <td align="center"><?= $val_1_txt | $val_2_txt ?></td> <td align="center"><?= strval($val_1_txt) | strval($val_2_txt) ?></td> <td align="center"><?= (0 + $val_1_txt) | (0 + $val_2_txt) ?></td> </tr> </table> <?}?> ------------------------- Previous Comments: ------------------------------------------------------------------------ [2002-07-31 18:57:18] sniper@php.net Please add a short but COMPLETE example script which clearly demonstrates the problem. ------------------------------------------------------------------------ [2002-07-31 15:03:38] su-php@bossi.com I stated that strval() does not work. However a kludge that DOES work is: echo "Val : ".((0 + $opt['time']) | (0 + $opt['date'])); ------------------------------------------------------------------------ [2002-07-31 14:53:07] su-php@bossi.com PHP version 4.1.1 (Hey it's an internal test bed, no outside connection) I am saving user options in an array. The array is then saved to the session. the basic variables are: $TIME_FORMAT_12 = 0x01; $TIME_FORMAT_24 = 0x02; $DATE_FORMAT_YMD = 0x04; $DATE_FORMAT_MDY = 0x08; $DATE_FORMAT_DMY = 0x10; $opt['time'] = $TIME_FORMAT_24; $opt['date'] = $DATE_FORMAT_DMY; At this point, the array holds numeric values. Now $opt[] is saved to the session. When it is read back in, I believe the two values are no longer numeric. If you OR the base values: echo "Val: ".($TIME_FORMAT_24 | $DATE_FORMAT_DMY); echo "Val: ".($opt['time'] | $opt['date'); you get 18 or 0x12. However if you OR the $opt values _after_ they have been retrieved from the session: echo "Val: ".($opt['time'] | $opt['date'); you get 36. I have tried (strval($opt['time']) | strval($opt['date'))) but it still fails. I am using the composite value to perform a logical AND to obtain the settings: if ( $format_in & $DATE_FORMAT_DMY ) within a function. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=18680&edit=1

« previous php.bugs (#15762) next »