PHP Bugs  
php.net | support | documentation | report a bug | advanced search | search howto | statistics | login

go to bug id or search bugs for  

Bug #18680 Logical OR fails if value is a string
Submitted:31 Jul 2002 2:53pm UTC Modified: 1 Apr 2004 3:16am UTC
From:su-php at bossi dot com Assigned to:
Status:Closed Category:Documentation problem
Version:4.3.2-dev 5CVS-2003-03-10 OS:any
View/Vote Developer Edit Submission

Welcome! If you don't have a SVN account, you can't do anything here. You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
SVN Username: SVN Password:
Quick Fix:
Status: Assign to:
Category:
Summary:
From: su-php at bossi dot com
New email:
Version: OS:
New/Additional Comment:

[31 Jul 2002 2:53pm 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.
[31 Jul 2002 3:03pm 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']));
[31 Jul 2002 6:57pm UTC] sniper@php.net
Please add a short but COMPLETE example script which clearly
demonstrates the problem. 

[1 Aug 2002 3:22pm 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>
<?}?>

-------------------------
[9 Mar 2003 7:28pm 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.
[10 Mar 2003 1:32pm 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.

[1 Apr 2004 3:16am 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.


RSS feed | show source 

PHP Copyright © 2001-2009 The PHP Group
All rights reserved.
Last updated: Sat Nov 21 10:30:49 2009 UTC