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
This commit is contained in:
Jesus M. Castagnetto 2003-04-05 10:03:45 +00:00
parent 47520a718d
commit 82829782b4

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.39 $ -->
<!-- $Revision: 1.40 $ -->
<chapter id="language.oop">
<title>Classes and Objects</title>
@ -936,16 +936,14 @@ class B: 11
</para>
</sect1>
<sect1 id="language.oop.object-comparison">
<sect1 id="language.oop.object-comparison-php4">
<title>Comparing objects in PHP 4</title>
<para>
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 (<literal>===</literal>).
</para>
<para>
If we were to execute the code in the example below:
<example>
@ -1085,6 +1083,105 @@ o1 !== o2 : TRUE
</screen>
</para>
</sect1>
<sect1 id="language.oop.object-comparison-php5">
<title>Comparing objects in PHP 5</title>
&warn.experimental;
<para>
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).
</para>
<para>
When using the comparison operator (<literal>==</literal>),
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.
</para>
<para>
On the other hand, when using the identity operator (<literal>===</literal>),
object variables are identical if and only if they refer to the same
instance of the same class (in a particular namespace).
</para>
<para>
An example will clarify these rules.
<example>
<title>Example of object comparison in PHP 5</title>
<programlisting role='php'>
<![CDATA[
function bool2str($bool) {
if ($bool === false) {
return 'FALSE';
} else {
return 'TRUE';
}
}
function compareObjects(&$o1, &$o2) {
echo 'o1 == o2 : '.bool2str($o1 == $o2)."\n";
echo 'o1 != o2 : '.bool2str($o1 != $o2)."\n";
echo 'o1 === o2 : '.bool2str($o1 === $o2)."\n";
echo 'o1 !== o2 : '.bool2str($o1 !== $o2)."\n";
}
class Flag {
var $flag;
function Flag($flag=true) {
$this->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);
]]>
</programlisting>
</example>
This example will output:
<screen>
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
</screen>
</para>
</sect1>
</chapter>
<!-- Keep this comment at the end of the file