Bug #69466 [Ver]: Spaceship operator rfc discrepancy

From: Date: Wed, 22 Apr 2015 13:47:17 +0000
Subject: Bug #69466 [Ver]: Spaceship operator rfc discrepancy
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-192275@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:         ajf@php.net
 Reported by:        ppasindud at gmail dot com
 Summary:            Spaceship operator rfc discrepancy
 Status:             Verified
 Type:               Bug
 Package:            *General Issues
 Operating System:   not need
 PHP Version:        master-Git-2015-04-16 (Git)
 Block user comment: N
 Private report:     N

 New Comment:

This is just a mistake in the RFC, not in the implementation, unless this doesn't match the
behaviour of <, <=, ==, >= or >.


Previous Comments:
------------------------------------------------------------------------
[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>

------------------------------------------------------------------------
[2015-04-16 08:32:27] ppasindud at gmail dot com

Description:
------------
http://3v4l.org/g5mCe

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


$a = (object) ["a" => "c"]; 
$b = (object) ["a" => "b"]; 
echo $a <=> $b; // 1

// only values are compared
$a = (object) ["a" => "b"]; 
$b = (object) ["b" => "b"]; 
echo $a <=> $b; // 0


Expected result:
----------------
10

Actual result:
--------------
11


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=69466&edit=1


Thread (7 messages)

« previous php.bugs (#192275) next »