Bug #71090 [Opn]: Comparison operators loop
| From: | reallfqq-php at yahoo dot fr | Date: | Fri, 11 Dec 2015 19:39:57 +0000 |
| Subject: | Bug #71090 [Opn]: Comparison operators loop | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-197809@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=71090&edit=1
ID: 71090
User updated by: reallfqq-php at yahoo dot fr
Reported by: reallfqq-php at yahoo dot fr
Summary: Comparison operators loop
Status: Open
Type: Bug
Package: Scripting Engine problem
PHP Version: 7.0.0
Block user comment: N
Private report: N
New Comment:
Short answer :
*Wrong*. Try the following code:
<?php
$a = 15;
$b = array();
$c = (object)array();
var_dump($a < $b);
var_dump($b < $c);
var_dump($c < $a);
?>
Result:
bool(true)
bool(true)
bool(true)
----------
Long answer:
Please do not oversee the problem and oversimplify it.
I am talking about operators, not constants. The problem is not INF at all.
Have you checked the linked webpage?
The first example show non-transitivity of some operators:
php -r 'var_dump(TRUE == "a"); var_dump("a" == 0); var_dump(TRUE ==
0);'
Expected :
bool(true)
bool(true)
bool(true)
Actual:
bool(true)
bool(true)
bool(false)
Then, and I think that is the biggest concern, there is circular references in the operators chain,
demonstrated in the bug report.
The bug report example actual shows a near-real-world use-case where the sort function is unable to
do its job. That is more spectacular.
Previous Comments:
------------------------------------------------------------------------
[2015-12-11 13:37:02] laruence@php.net
the problem is INF, comparing sequence matters here.
------------------------------------------------------------------------
[2015-12-11 12:19:10] reallfqq-php at yahoo dot fr
Description:
------------
PHP's comparison operators are circular, generatng situations where impossible equalities are
considered valid.
This bug is posted in reference to:
http://phpsadness.com/sad/52
Test script:
---------------
<?php
function is_sorted($array) {
$n = count($array);
for ($a=0; $a<$n-1; $a++) {
for ($b=$a+1; $b<$n; $b++) {
if ($array[$a] > $array[$b]) {
return false;
}
}
}
return true;
}
$array = array(INF, array(), (object)array());
sort($array);
var_dump(is_sorted($array))
?>
Expected result:
----------------
bool(true)
Actual result:
--------------
bool(false)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=71090&edit=1