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
