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

 ID:                 25772
 Comment by:         morrison dot levi at gmail dot com
 Reported by:        dmitrijsl at swh-t dot lv
 Summary:            Custom comparison of objects: __equals method
 Status:             Wont fix
 Type:               Feature/Change Request
 Package:            Feature/Change Request
 Operating System:   *
 PHP Version:        5.0.0b1 (beta1)
 Block user comment: N
 Private report:     N

 New Comment:

I would like to know why this is so complicated and why it's marked as closed, 
won't fix.


Previous Comments:
------------------------------------------------------------------------
[2004-04-15 03:29:58] [email protected]

We're not going to have more magic then there already is; those things are 
going to be to complicated and confusing (See the __string()) issue.

------------------------------------------------------------------------
[2004-04-14 22:58:21] jevon at jevon dot org

Would love this feature! Java implements this through:

class Object {
   boolean equals(Object o);
}

So you could either make all user-defined objects include a simple equals() 
function [and similarly, identical()].

Or perhaps, develop the aforementioned magic __equals() [and __identical()] 
functions. (As well as __less())

------------------------------------------------------------------------
[2003-10-07 05:21:33] [email protected]

If at all then we should be able to do all comparisons directly by 
__compare($other, $operator) where operator is one of {<,<=,==,!=,>,>=} or by 
another method __less() which performs a < test so that __less() and __equals() 
can be used to emulate all other tests.

------------------------------------------------------------------------
[2003-10-07 04:05:43] dmitrijsl at swh-t dot lv

Description:
------------
If a class defines a __equals($other) function, invoke that function on object 
comparison. Example:

==========================
class MyClass {
    public function __construct($value) {
        $this->value = $value;
    }

    /**
     * This function should be invoked on object
     * comparison with == or != operators.
     */
    public function __equals($other) {
        if ($other instanceof MyClass) {
            return ((int)$this->value
                   == (int)$other->value);
        } else {
            return false;
        }
    }

    private $value;
}

$a = new MyClass(3.14);
$b = new MyClass(3.13);

if ($a == $b) {
    echo '$a equals $b';
}
==========================

The comparison of $a and $b should result in the invokation of __equals 
function of MyClass. The same should apply to the != (not equals) operator.




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



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

Reply via email to