Re: Comparing objects on PHP5
| From: | Andi Gutmans | Date: | Mon, 10 May 2004 15:01:22 +0000 |
| Subject: | Re: Comparing objects on PHP5 | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-9794@lists.php.net to get a copy of this message | ||
This should be fixed now.
Basically in non-compatibility mode == does the same as PHP 4 (it compares object type and properties) and === compares object handles (this is because comparing object handles from our experience with Java isn't used that often and it's very useful to be able to use the PHP 4 == semantics).
In compatibility mode, both == and === compare object type and properties.
In any case, overloaded internal extensions, such as SimpleXML can still overload the cast_object() handler to cast their objects to scalars.
Andi
At 08:24 AM 5/10/2004 +0900, Rui Hirokawa wrote:
I performed the same test with HEAD (PHP 5.0.0RC3-dev (build: May 9 2004 10:16:50)). There are no E_NOTICE message now, but, the problems are still existing with RC2, PHP 4.3.6 same,not same,not same,same same,not same,not same,same PHP 5.0.0-CVS 2004/5/9 (ze1_compatibility_mode = Off) same,not same,not same,same not same,not same,not same,same PHP 5.0.0-CVS 2004/5/9 (ze1_compatibility_mode = On) same,same,not same,same not same,not same,not same,not same Rui On Sun, 09 May 2004 19:17:35 +0300 Andi Gutmans <andi@zend.com> wrote: Did you check HEAD? I fixed something to do with the comparison. if it still doesn't work please let me know. Andi At 04:43 PM 5/9/2004 +0900, Rui Hirokawa wrote:Hi, I think objects comparison in PHP5 has problems. Here is small sample code, <?php class Foo { var $v = 1; } class Boo { var $v = 1; } $a = new Foo; $b = new Foo; $c = new Boo; $d = new Foo; $d->v = 2; $e = $a; // value comparison echo $a == $b ? "same," : "not same,"; echo $a == $c ? "same," : "not same,"; echo $a == $d ? "same," : "not same,"; echo $a == $e ? "same" : "not same"; echo "\n"; // value and type comparison echo $a === $b ? "same," : "not same,"; echo $a === $c ? "same," : "not same,"; echo $a === $d ? "same," : "not same,"; echo $a === $e ? "same" : "not same"; ?> The output from PHP4 and PHP5(ze1_compat on/off) is, PHP 4.3.6 : same,not same,not same,same same,not same,not same,same PHP 5.0.0RC2 zend.ze1_compatibility_mode=off : same,not same,not same,same (Notice: Object of class [Foo|Boo] could not be converted to integer) not same,not same,not same,same PHP 5.0.0RC2 zend.ze1_compatibility_mode=on : same,same,not same,same not same,not same,not same,not same The problem and question are, 1. the different class is recognised as same in PHP5 (ze1_compat=on). 2. the same object is recognised as different in PHP5 (ze1_compat=on). 3. Why integer casting of object was implicitly applied in PHP5 (ze1_compat=off) ?-- Rui Hirokawa <rui_hirokawa@ybb.ne.jp>