php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #18680 Logical OR fails if value is a string
Submitted: 2002-07-31 14:53 UTC Modified: 2004-04-01 03:16 UTC
From: su-php at bossi dot com Assigned:
Status: Closed Package: Documentation problem
PHP Version: 4.3.2-dev 5CVS-2003-03-10 OS: any
Private report: No CVE-ID: None
 [2002-07-31 14:53 UTC] su-php at bossi dot 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.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-07-31 15:03 UTC] su-php at bossi dot 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 18:57 UTC] sniper@php.net
Please add a short but COMPLETE example script which clearly demonstrates the problem. 


 [2002-08-01 15:22 UTC] su-php at bossi dot com
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>
<?}?>

-------------------------
 [2003-03-09 19:28 UTC] moriyoshi@php.net
<?php
var_dump(ord(chr(32) | chr(64)));
var_dump(32 | 64);
var_dump(ord(chr(127) & (chr(32) | chr(16))));
var_dump(127 & (32 | 16));
var_dump("ABC" | " bc"); // should result in "abc"
?>

If a bitwise operation are performed between two string nodes, that ends up with the results of that operation of the values of each character's character codes.
 [2003-03-10 13:32 UTC] moriyoshi@php.net
Should be a documentation problem for the sake of backwards compatibility, though I don't think this feature is useful anyhow.


 [2004-04-01 03:16 UTC] irchtml@php.net
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Oct 18 04:01:29 2024 UTC