Bug #69466 [Ver->Csd]: Spaceship operator rfc discrepancy

From: 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

« previous php.bugs (#194533) next »