Req #25772 [Com]: Custom comparison of objects: __equals method
| From: | morrison dot levi at gmail dot com | Date: | Fri, 18 Nov 2011 05:58:36 +0000 |
| Subject: | Req #25772 [Com]: Custom comparison of objects: __equals method | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-165309@lists.php.net to get a copy of this message | ||
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] derick@php.net
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] helly@php.net
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