Source of: /manual/en/language.oop5.object-comparison.php
<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.oop5.inc";
$setup = array (
'home' =>
array (
0 => 'index.php',
1 => 'PHP Manual',
),
'head' =>
array (
0 => 'UTF-8',
1 => 'en',
),
'this' =>
array (
0 => 'language.oop5.object-comparison.php',
1 => 'Comparing Objects',
),
'up' =>
array (
0 => 'language.oop5.php',
1 => 'Classes and Objects',
),
'prev' =>
array (
0 => 'language.oop5.cloning.php',
1 => 'Object Cloning',
),
'next' =>
array (
0 => 'language.oop5.typehinting.php',
1 => 'Type Hinting',
),
);
$setup["toc"] = $TOC;
$setup["parents"] = $PARENTS;
manual_setup($setup);
manual_header();
?>
<div id="language.oop5.object-comparison" class="sect1">
<h2 class="title">Comparing Objects</h2>
<p class="para">
In PHP 5, object comparison is 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).
</p>
<p class="para">
When using the comparison operator (<i>==</i>),
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.
</p>
<p class="para">
On the other hand, when using the identity operator (<i>===</i>),
object variables are identical if and only if they refer to the same
instance of the same class.
</p>
<p class="para">
An example will clarify these rules.
</p><div class="example">
<p><b>Example #1 Example of object comparison in PHP 5</b></p>
<div class="example-contents programlisting">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB"><?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">bool2str</span><span style="color: #007700">(</span><span style="color: #0000BB">$bool</span><span style="color: #007700">)<br />{<br /> if (</span><span style="color: #0000BB">$bool </span><span style="color: #007700">=== </span><span style="color: #0000BB">false</span><span style="color: #007700">) {<br /> return </span><span style="color: #DD0000">'FALSE'</span><span style="color: #007700">;<br /> } else {<br /> return </span><span style="color: #DD0000">'TRUE'</span><span style="color: #007700">;<br /> }<br />}<br /><br />function </span><span style="color: #0000BB">compareObjects</span><span style="color: #007700">(&</span><span style="color: #0000BB">$o1</span><span style="color: #007700">, &</span><span style="color: #0000BB">$o2</span><span style="color: #007700">)<br />{<br /> echo </span><span style="color: #DD0000">'o1 == o2 : ' </span><span style="color: #007700">. </span><span style="color: #0000BB">bool2str</span><span style="color: #007700">(</span><span style="color: #0000BB">$o1 </span><span style="color: #007700">== </span><span style="color: #0000BB">$o2</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">'o1 != o2 : ' </span><span style="color: #007700">. </span><span style="color: #0000BB">bool2str</span><span style="color: #007700">(</span><span style="color: #0000BB">$o1 </span><span style="color: #007700">!= </span><span style="color: #0000BB">$o2</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">'o1 === o2 : ' </span><span style="color: #007700">. </span><span style="color: #0000BB">bool2str</span><span style="color: #007700">(</span><span style="color: #0000BB">$o1 </span><span style="color: #007700">=== </span><span style="color: #0000BB">$o2</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> echo </span><span style="color: #DD0000">'o1 !== o2 : ' </span><span style="color: #007700">. </span><span style="color: #0000BB">bool2str</span><span style="color: #007700">(</span><span style="color: #0000BB">$o1 </span><span style="color: #007700">!== </span><span style="color: #0000BB">$o2</span><span style="color: #007700">) . </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br />}<br /><br />class </span><span style="color: #0000BB">Flag<br /></span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">$flag</span><span style="color: #007700">;<br /><br /> function </span><span style="color: #0000BB">Flag</span><span style="color: #007700">(</span><span style="color: #0000BB">$flag </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">flag </span><span style="color: #007700">= </span><span style="color: #0000BB">$flag</span><span style="color: #007700">;<br /> }<br />}<br /><br />class </span><span style="color: #0000BB">OtherFlag<br /></span><span style="color: #007700">{<br /> public </span><span style="color: #0000BB">$flag</span><span style="color: #007700">;<br /><br /> function </span><span style="color: #0000BB">OtherFlag</span><span style="color: #007700">(</span><span style="color: #0000BB">$flag </span><span style="color: #007700">= </span><span style="color: #0000BB">true</span><span style="color: #007700">) {<br /> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">flag </span><span style="color: #007700">= </span><span style="color: #0000BB">$flag</span><span style="color: #007700">;<br /> }<br />}<br /><br /></span><span style="color: #0000BB">$o </span><span style="color: #007700">= new </span><span style="color: #0000BB">Flag</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">Flag</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$q </span><span style="color: #007700">= </span><span style="color: #0000BB">$o</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$r </span><span style="color: #007700">= new </span><span style="color: #0000BB">OtherFlag</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #DD0000">"Two instances of the same class\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">compareObjects</span><span style="color: #007700">(</span><span style="color: #0000BB">$o</span><span style="color: #007700">, </span><span style="color: #0000BB">$p</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"\nTwo references to the same instance\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">compareObjects</span><span style="color: #007700">(</span><span style="color: #0000BB">$o</span><span style="color: #007700">, </span><span style="color: #0000BB">$q</span><span style="color: #007700">);<br /><br />echo </span><span style="color: #DD0000">"\nInstances of two different classes\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">compareObjects</span><span style="color: #007700">(</span><span style="color: #0000BB">$o</span><span style="color: #007700">, </span><span style="color: #0000BB">$r</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?></span>
</span>
</code></div>
</div>
<div class="example-contents para"><p>The above example will output:</p></div>
<div class="example-contents screen">
<div class="cdata"><pre>
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 two different classes
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
</pre></div>
</div>
</div><p>
</p>
<blockquote><p><b class="note">Note</b>:
Extensions can define own rules for their objects comparison.
<br />
</p></blockquote>
</div><?php manual_footer(); ?>