1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-23 23:32:16 +01:00
Files
archived-doc-ru/appendices/comparisons.xml
2026-01-18 09:23:54 +03:00

646 lines
19 KiB
XML
Raw Permalink 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: 88890f831cb49dc2b2be942039b1938217b1cc54 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<appendix xml:id="types.comparisons" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Таблицы сравнения типов PHP</title>
<para>
Следующие таблицы показывают работу PHP
<link linkend="language.types">с типами переменных</link>
<link linkend="language.operators.comparison">и операторами сравнения</link>
при слабых и строгих сравнениях. Эта информация также относится
к разделу документации <link linkend="language.types.type-juggling">по приведению типов</link>.
Написать раздел разработчиков PHP воодушивили комментарии пользователей и работа
над фреймворком <link xlink:href="&url.blueshoes.comparisons;">BlueShoes</link>.
</para>
<para>
Перед началом работы с таблицами вспомним базовую информацию о типах.
Наример, <literal>"42"</literal> — строка (<type>string</type>),
а <literal>42</literal> — целое число (<type>int</type>), &false;
логическое значение (<type>bool</type>), а <literal>"false"</literal> — строка (<type>string</type>).
</para>
<note>
<para>
HTML-формы не передают логические переменные, целые или дробные числа:
из форм приходят только строки. Функция <function>is_numeric</function> проверяет,
относится ли строка к числовой.
</para>
</note>
<note>
<para>
Выражение <literal>if ($x)</literal>, если переменную <varname>$x</varname>
не определили, сгенерирует ошибку уровня <constant>E_NOTICE</constant>,
поэтому переменную сначала инициализируют или в первом условии проверяют переменную
языковой конструкцией <function>empty</function> или <function>isset</function>.
</para>
</note>
<note>
<para>
Отдельные арифметические операции возвращают значение,
которое представляет константа <constant>NAN</constant> (англ. Not A Number,
нечисло). Строгое или нестрогое сравнение такого значения
с другим, включая его само, но исключая &true;, вернёт &false;:
<literal>NAN != NAN</literal> и <literal>NAN !== NAN</literal>.
Примеры операций, которые возвращают константу <constant>NAN</constant>:
<literal>sqrt(-1)</literal>, <literal>asin(2)</literal> и <literal>acosh(0)</literal>.
</para>
</note>
<para>
<table>
<title>Сравнение типов переменной <varname>$x</varname> и результатов функций PHP, связанных с типами</title>
<tgroup cols="6">
<thead>
<row>
<entry>Выражение</entry>
<entry><function>gettype</function></entry>
<entry><function>empty</function></entry>
<entry><function>is_null</function></entry>
<entry><function>isset</function></entry>
<entry><type>bool</type> : <literal>if($x)</literal></entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>$x = "";</literal></entry>
<entry><type>string</type></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>$x = null;</literal></entry>
<entry><type>NULL</type></entry>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>var $x;</literal></entry>
<entry><type>NULL</type></entry>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><varname>$x</varname> не определена</entry>
<entry><type>NULL</type></entry>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>$x = [];</literal></entry>
<entry><type>array</type></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>$x = ['a', 'b'];</literal></entry>
<entry><type>array</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = false;</literal></entry>
<entry><type>bool</type></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>$x = true;</literal></entry>
<entry><type>bool</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = 1;</literal></entry>
<entry><type>int</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = 42;</literal></entry>
<entry><type>int</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = 0;</literal></entry>
<entry><type>int</type></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>$x = -1;</literal></entry>
<entry><type>int</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = "1";</literal></entry>
<entry><type>string</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = "0";</literal></entry>
<entry><type>string</type></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>$x = "-1";</literal></entry>
<entry><type>string</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = "php";</literal></entry>
<entry><type>string</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = "true";</literal></entry>
<entry><type>string</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>$x = "false";</literal></entry>
<entry><type>string</type></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
<table xml:id="types.comparisions-loose">
<title>Гибкое сравнение через оператор <literal>==</literal></title>
<tgroup cols="12">
<thead>
<row>
<entry> </entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry><literal>1</literal></entry>
<entry><literal>0</literal></entry>
<entry><literal>-1</literal></entry>
<entry><literal>"1"</literal></entry>
<entry><literal>"0"</literal></entry>
<entry><literal>"-1"</literal></entry>
<entry>&null;</entry>
<entry><literal>[]</literal></entry>
<entry><literal>"php"</literal></entry>
<entry><literal>""</literal></entry>
</row>
</thead>
<tbody>
<row>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>1</literal></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>0</literal></entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;*</entry>
<entry>&false;*</entry>
</row>
<row>
<entry><literal>-1</literal></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"1"</literal></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"0"</literal></entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"-1"</literal></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry>&null;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
</row>
<row>
<entry><literal>[]</literal></entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"php"</literal></entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;*</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>""</literal></entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;*</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
</row>
</tbody>
</tgroup>
</table>
* &true; до PHP 8.0.0.
</para>
<para>
<table xml:id="type.comparisons-strict">
<title>Жёсткое сравнение через оператор <literal>===</literal></title>
<tgroup cols="12">
<thead>
<row>
<entry> </entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry><literal>1</literal></entry>
<entry><literal>0</literal></entry>
<entry><literal>-1</literal></entry>
<entry><literal>"1"</literal></entry>
<entry><literal>"0"</literal></entry>
<entry><literal>"-1"</literal></entry>
<entry>&null;</entry>
<entry><literal>[]</literal></entry>
<entry><literal>"php"</literal></entry>
<entry><literal>""</literal></entry>
</row>
</thead>
<tbody>
<row>
<entry>&true;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>1</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>0</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>-1</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"1"</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"0"</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"-1"</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry>&null;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>[]</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>"php"</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
<entry>&false;</entry>
</row>
<row>
<entry><literal>""</literal></entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&false;</entry>
<entry>&true;</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</appendix>
<!-- 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
-->