[PHP-BUG] Bug #69588 [NEW]: Inconsistent numeric string comparison

[email protected] ("markus at malkusch dot de")
Newsgroups php.standards
Message-ID <[email protected]>
From:             markus at malkusch dot de
Operating system: 
PHP version:      5.6.8
Package:          PHP Language Specification
Bug Type:         Bug
Bug description:Inconsistent numeric string comparison

Description:
------------
The manual says in "Comparison Operators":

> If [..] the comparison involves numerical strings, then each string is

> converted to a number and the comparison performed numerically.

That does explain why e.g. "10" == "0xa" evaluates to true. Now I would
expect that every other representation of 10 would do the same. It
doesn't for binary and octal representations. I.e "10" == "0b1010"
evaluates to false, the same for "10" == "012".

One could argue that numerical string is not defined. But then I would
expect that a string for which is_numeric() returns true would qualify
as a numerical string. is_numeric("012") does return true, but "012" ==
"10" not.

Test script:
---------------
<?php

var_dump(
    0b1010, "10" == "0b1010", // false
    012,    "10" == "012",    // false
    0xa,    "10" == "0xa",    // true
    1E+1,   "10" == "1E+1",   // true
    1e1,    "10" == "1e1",    // true
    10.0,   "10" == "10.0",   // true
    +10,    "10" == "+10"     // true
);

Expected result:
----------------
int(10)
bool(true)
int(10)
bool(true)
int(10)
bool(true)
double(10)
bool(true)
double(10)
bool(true)
double(10)
bool(true)
int(10)
bool(true)

Actual result:
--------------
int(10)
bool(false)
int(10)
bool(false)
int(10)
bool(true)
double(10)
bool(true)
double(10)
bool(true)
double(10)
bool(true)
int(10)
bool(true)

-- 
Edit bug report at https://bugs.php.net/bug.php?id=69588&edit=1
-- 
Try a snapshot (PHP 5.4):   https://bugs.php.net/fix.php?id=69588&r=trysnapshot54
Try a snapshot (PHP 5.5):   https://bugs.php.net/fix.php?id=69588&r=trysnapshot55
Try a snapshot (trunk):     https://bugs.php.net/fix.php?id=69588&r=trysnapshottrunk
Fixed in SVN:               https://bugs.php.net/fix.php?id=69588&r=fixed
Fixed in release:           https://bugs.php.net/fix.php?id=69588&r=alreadyfixed
Need backtrace:             https://bugs.php.net/fix.php?id=69588&r=needtrace
Need Reproduce Script:      https://bugs.php.net/fix.php?id=69588&r=needscript
Try newer version:          https://bugs.php.net/fix.php?id=69588&r=oldversion
Not developer issue:        https://bugs.php.net/fix.php?id=69588&r=support
Expected behavior:          https://bugs.php.net/fix.php?id=69588&r=notwrong
Not enough info:            https://bugs.php.net/fix.php?id=69588&r=notenoughinfo
Submitted twice:            https://bugs.php.net/fix.php?id=69588&r=submittedtwice
register_globals:           https://bugs.php.net/fix.php?id=69588&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=69588&r=php4
Daylight Savings:           https://bugs.php.net/fix.php?id=69588&r=dst
IIS Stability:              https://bugs.php.net/fix.php?id=69588&r=isapi
Install GNU Sed:            https://bugs.php.net/fix.php?id=69588&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=69588&r=float
No Zend Extensions:         https://bugs.php.net/fix.php?id=69588&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=69588&r=mysqlcfg
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.