From 82829782b490b22a3cf657f64f30ed19f975018c Mon Sep 17 00:00:00 2001 From: "Jesus M. Castagnetto" Date: Sat, 5 Apr 2003 10:03:45 +0000 Subject: [PATCH] Changed element id for obj. comp. in PHP4 Added docs on object comparison in PHP5 git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@122618 c90b9560-bf6c-de11-be94-00142212c4b1 --- language/oop.xml | 105 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 4 deletions(-) diff --git a/language/oop.xml b/language/oop.xml index 7868d683e9..32d327dbbb 100644 --- a/language/oop.xml +++ b/language/oop.xml @@ -1,5 +1,5 @@ - + Classes and Objects @@ -936,16 +936,14 @@ class B: 11 - + Comparing objects in PHP 4 - In PHP 4, objects are compared in a very simple manner, namely: Two object instances are equal if they have the same attributes and values, and are instances of the same class. Similar rules are applied when comparing two objects using the identity operator (===). - If we were to execute the code in the example below: @@ -1085,6 +1083,105 @@ o1 !== o2 : TRUE + + + Comparing objects in PHP 5 + &warn.experimental; + + In PHP 5, object comparison is a more complicated than in PHP 4 and more + in accordance to what one will expect from an Object Oriented Language + (not that PHP 5 is such a language). + + + When using the comparison operator (==), + object variables are compared in a simple manner, namely: Two object + instances are equal if they have the same attributes and values, and are + instances of the same class, defined in the same namespace. + + + On the other hand, when using the identity operator (===), + object variables are identical if and only if they refer to the same + instance of the same class (in a particular namespace). + + + An example will clarify these rules. + + Example of object comparison in PHP 5 + +flag = $flag; + } +} + +namespace Other { + + class Flag { + var $flag; + + function Flag($flag=true) { + $this->flag = $flag; + } + } + +} + +$o = new Flag(); +$p = new Flag(); +$q = $o; +$r = new Other::Flag(); + +echo "Two instances of the same class\n"; +compareObjects($o, $p); + +echo "\nTwo references to the same instance\n"; +compareObjects($o, $q); + +echo "\nInstances of similarly named classes in different namespaces\n"; +compareObjects($o, $r); +]]> + + + This example will output: + +Two instances of the same class +o1 == o2 : TRUE +o1 != o2 : FALSE +o1 === o2 : FALSE +o1 !== o2 : TRUE + +Two references to the same instance +o1 == o2 : TRUE +o1 != o2 : FALSE +o1 === o2 : TRUE +o1 !== o2 : FALSE + +Instances of similarly named classes in different namespaces +o1 == o2 : FALSE +o1 != o2 : TRUE +o1 === o2 : FALSE +o1 !== o2 : TRUE + + +