mirror of
https://github.com/php/doc-ru.git
synced 2025-08-16 18:22:04 +00:00
git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@343766 c90b9560-bf6c-de11-be94-00142212c4b1
125 lines
3.5 KiB
XML
125 lines
3.5 KiB
XML
<?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
|
||
-->
|