Files
php-doc-ru/language/oop5/object-comparison.xml
Alexey Pyltsyn 9dbecf94f9 OOP: improvements
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@343766 c90b9560-bf6c-de11-be94-00142212c4b1
2018-01-04 15:52:17 +00:00

125 lines
3.5 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: ead385635aff62492784d1bc32097d7a050f8207 Maintainer: shein Status: ready -->
<!-- Reviewed: yes -->
<!-- $Revision$ -->
<sect1 xml:id="language.oop5.object-comparison" xmlns="http://docbook.org/ns/docbook">
<title>Сравнение объектов</title>
<para>
При использовании оператора сравнения (<literal>==</literal>),
свойства объектов просто сравниваются друг с другом, а именно: два
объекта равны, если они имеют одинаковые атрибуты и значения
(значения сравниваются через <literal>==</literal>) и являются
экземплярами одного и того же класса.
</para>
<para>
С другой стороны, при использовании оператора идентичности (<literal>===</literal>),
переменные, содержащие объекты, считаются идентичными только тогда, когда
они ссылаются на один и тот же экземпляр одного и того же класса.
</para>
<para>
Следующий пример пояснит эти правила.
<example>
<title>Пример сравнения объектов в PHP 5</title>
<programlisting role="php">
<![CDATA[
<?php
function bool2str($bool)
{
return (string) $bool;
}
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
{
public $flag;
function __construct($flag = true) {
$this->flag = $flag;
}
}
class OtherFlag
{
public $flag;
function __construct($flag = true) {
$this->flag = $flag;
}
}
$o = new Flag();
$p = new Flag();
$q = $o;
$r = new OtherFlag();
echo "Два экземпляра одного и того же класса\n";
compareObjects($o, $p);
echo "\nДве ссылки на один и тот же экземпляр\n";
compareObjects($o, $q);
echo "\nЭкземпляры двух разных классов\n";
compareObjects($o, $r);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Два экземпляра одного и того же класса
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : FALSE
o1 !== o2 : TRUE
Две ссылки на один и тот же экземпляр
o1 == o2 : TRUE
o1 != o2 : FALSE
o1 === o2 : TRUE
o1 !== o2 : FALSE
Экземпляры двух разных классов
o1 == o2 : FALSE
o1 != o2 : TRUE
o1 === o2 : FALSE
o1 !== o2 : TRUE
]]>
</screen>
</example>
</para>
<note>
<para>
Расширения могут определять собственные правила для сравнения
своих объектов (<literal>==</literal>).
</para>
</note>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->