ID: 9186
Updated by: zak
Reported By: [EMAIL PROTECTED]
Old-Status: Bogus
Status: Open
Bug Type: Scripting Engine problem
Assigned To:
Comments:
Incorrectly flagged as bogus.
Previous Comments:
---------------------------------------------------------------------------
[2001-02-09 10:59:10] [EMAIL PROTECTED]
I think there is no reason to convert any type if both
operands of the comparision are of the same type. It costs
time and it's completely not necessary. This is a bug.
I can not see any description of this behavior in the
manual. The string type section descibes only what is
happen if a string is converted.
---------------------------------------------------------------------------
[2001-02-09 10:27:46] [EMAIL PROTECTED]
Actually, this is a feature - it is described in the manual. Strings that look like
numbers are converted to numbers. Large numbers - like the ones below may not convert
perfectly from a string to a number. Review the manual section on PHP types in
general and strings in particular
(http://uk.php.net/manual/en/language.types.string.php)
While this is a relatively subtle bug, you can ensure that you are dealing with
strings by quoting the variables being compared or by using the === operator. This
behavior is exploited quite often in PHP scripts. However, perhaps it would be nice
if PHP generated an notice level error when it occured so that users have some
recourse when it happens unexpectedly.
If you feel strongly about this, propose it to the developers as a feature request.
Post your request on the [EMAIL PROTECTED] list (sub at
[EMAIL PROTECTED]) - if you get no response, be polite but persistant. :)
---------------------------------------------------------------------------
[2001-02-09 03:25:24] [EMAIL PROTECTED]
First the test script:
<?
$a = '012345678901234567';
$b = '012345678901234568';
echo ($a == $b) ? "a equal bn" : "a not equal bn";
echo ($a === $b) ? "a equal bn" : "a not equal bn";
printf ("as string: a=%s b=%sn", $a, $b);
printf ("as float: a=%.0f b=%.0fn", $a, $b);
printf ("as int: a=%d b=%dn", $a, $b);
?>
and its output:
a equal b
a not equal b
as string: a=012345678901234567 b=012345678901234568
as float: a=12345678901234567 b=12345678901234567
as int: a=2147483647 b=2147483647
Zend trys to convert the arguments to numbers if both
arguments are strings. This is not good and its not a
feature.
---------------------------------------------------------------------------
ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=9186&edit=2
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]