Bug #69466 [Ver->Csd]: Spaceship operator rfc discrepancy
| From: | pasindu@php.net | Date: | Sat, 18 Jul 2015 14:22:25 +0000 |
| Subject: | Bug #69466 [Ver->Csd]: Spaceship operator rfc discrepancy | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-194533@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=69466&edit=1
ID: 69466
Updated by: pasindu@php.net
Reported by: ppasindud at gmail dot com
Summary: Spaceship operator rfc discrepancy
-Status: Verified
+Status: Closed
Type: Bug
Package: *General Issues
Operating System: not need
PHP Version: master-Git-2015-04-16 (Git)
-Assigned To:
+Assigned To: pasindu
Block user comment: N
Private report: N
New Comment:
The fix for this bug has been committed.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
For Windows:
http://windows.php.net/snapshots/
Thank you for the report, and for helping us make PHP better.
fixed*
Previous Comments:
------------------------------------------------------------------------
[2015-04-29 16:30:04] pasindu@php.net
Found something else today
http://3v4l.org/mO48q
echo [1, 2, 3] <=> []; // should be 1 but it gives 3
------------------------------------------------------------------------
[2015-04-22 13:47:17] ajf@php.net
This is just a mistake in the RFC, not in the implementation, unless this doesn't match the
behaviour of <, <=, ==, >= or >.
------------------------------------------------------------------------
[2015-04-19 22:01:38] stas@php.net
Comparing such objects is not a meaningful operation, in general, so the result is not well-defined.
But I don't see where the discrepancy is.
------------------------------------------------------------------------
[2015-04-19 15:39:41] levim@php.net
This ends up using
zend_hash_compare; see http://lxr.php.net/xref/PHP_TRUNK/Zend/zend_hash.c#zend_hash_compare
In this case it cannot find key "a" in $b so it returns 1.
------------------------------------------------------------------------
[2015-04-16 11:17:51] cmb@php.net
It seems the RFC[1] contradicts itself:
| It is implemented by using the result of the existing internal
| compare_function that underlies the other comparison operators.
but:
| // only values are compared
| $a = (object) ["a" => "b"];
| $b = (object) ["b" => "b"];
| echo $a <=> $b; // 0
However:
var_dump($a < $b); // => bool(false)
var_dump($b < $a); // => bool(false)
And currently:
echo $a <=> $b; // => 1
echo $b <=> $a; // => 1
Apparently, there is a problem with comparing unordered values with
the spaceship operator.
[1] <https://wiki.php.net/rfc/combined-comparison-operator>
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=69466
--
Edit this bug report at https://bugs.php.net/bug.php?id=69466&edit=1