1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-24 07:42:22 +01:00
Files
archived-doc-ru/language/types/type-system.xml

228 lines
8.8 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: f908fff129bcd8ec1605658e06457cb04e5b2b51 Maintainer: sergey Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.types.type-system">
<title>Система типов</title>
<para>
Язык PHP использует систему номинальных типов с сильным отношением поведенческого подтипирования.
PHP проверяет отношение подтипов во время компиляции,
тогда как контроль типов язык выполняет динамически во время выполнения.
</para>
<para>
Система типов данных в PHP поддерживает атомарные типы,
которые разрешено объединять, чтобы создавать сложные типы.
Часть этих типов допустимо записывать
в <link linkend="language.types.declarations">объявлениях типов</link>.
</para>
<sect2 xml:id="language.types.type-system.atomic">
<title>Атомарные типы</title>
<para>
Отдельные атомарные типы — встроенные типы,
которые тесно интегрированы с языком и которые невозможно воспроизвести
пользовательским определением типов.
</para>
<para>
Список базовых типов:
<itemizedlist>
<listitem>
<simpara>Встроенные типы</simpara>
<itemizedlist>
<listitem>
<simpara>
Скалярные типы:
</simpara>
<itemizedlist>
<listitem>
<simpara><type>bool</type></simpara>
</listitem>
<listitem>
<simpara><type>int</type></simpara>
</listitem>
<listitem>
<simpara><type>float</type></simpara>
</listitem>
<listitem>
<simpara><type>string</type></simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara><type>array</type></simpara>
</listitem>
<listitem>
<simpara><type>object</type></simpara>
</listitem>
<listitem>
<simpara><type>resource</type></simpara>
</listitem>
<listitem>
<simpara><type>never</type></simpara>
</listitem>
<listitem>
<simpara><type>void</type></simpara>
</listitem>
<listitem>
<simpara>
«<link linkend="language.types.relative-class-types">Относительные типы классов</link>»:
<type>self</type>, <type>parent</type> и <type>static</type>
</simpara>
</listitem>
<listitem>
<simpara>
<link linkend="language.types.singleton">Одноэлементные типы</link>
</simpara>
<itemizedlist>
<listitem>
<simpara><type>false</type></simpara>
</listitem>
<listitem>
<simpara><type>true</type></simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara>
Объединение типов
</simpara>
<itemizedlist>
<listitem>
<simpara><type>null</type></simpara>
</listitem>
</itemizedlist>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara>
Определяемые пользователем типы (часто называемые класс-типами)
</simpara>
<itemizedlist>
<listitem>
<simpara><link linkend="language.oop5.interfaces">Интерфейсы</link></simpara>
</listitem>
<listitem>
<simpara><link linkend="language.oop5.basic.class">Классы</link></simpara>
</listitem>
<listitem>
<simpara><link linkend="language.types.enumerations">Перечисления</link></simpara>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<simpara><type>callable</type></simpara>
</listitem>
</itemizedlist>
</para>
<sect3 xml:id="language.types.type-system.atomic.scalar">
<title>Скалярные типы</title>
<simpara>
PHP считает значение скалярным, если значение принадлежит типу <type>int</type>,
<type>float</type>, <type>string</type> или <type>bool</type>.
</simpara>
</sect3>
<sect3 xml:id="language.types.type-system.atomic.user-defined">
<title>Пользовательские типы</title>
<simpara>
Язык разрешает определять пользовательские типы данных через
<link linkend="language.oop5.interfaces">интерфейсы</link>,
<link linkend="language.oop5.basic.class">классы</link>
и <link linkend="language.types.enumerations">перечисления</link>.
PHP рассматривает пользовательские типы как типы классов.
Приведём пример. Язык разрешает определить класс с названием <literal>Elephant</literal>,
затем создать объект с типом <literal>Elephant</literal>,
а потом определить функцию с параметром, который ждёт аргумент с типом <literal>Elephant</literal>.
</simpara>
</sect3>
</sect2>
<sect2 xml:id="language.types.type-system.composite">
<title>Составные типы</title>
<para>
Возможно объединение нескольких атомарных типов в составные типы.
PHP разрешает объединять типы следующими способами:
</para>
<itemizedlist>
<listitem>
<simpara>
Пересечение класс-типов (интерфейсов и названий классов).
</simpara>
</listitem>
<listitem>
<simpara>
Объединение типов.
</simpara>
</listitem>
</itemizedlist>
<sect3 xml:id="language.types.type-system.composite.intersection">
<title>Пересечение типов</title>
<para>
Пересечение типов принимает значения, которые удовлетворяют не одному,
а одновременно нескольким объявлениям класс-типов.
Отдельные пересекающиеся типы соединяются символом <literal>&amp;</literal>.
Поэтому пересечение типов <literal>T</literal>, <literal>U</literal> и <literal>V</literal>
записывает как <literal>T&amp;U&amp;V</literal>.
</para>
</sect3>
<sect3 xml:id="language.types.type-system.composite.union">
<title>Объединение типов</title>
<para>
Объединение типов принимает значения нескольких отличающихся типов, а не одного.
Отдельные объединяемые типы соединяются символом <literal>|</literal>.
Поэтому объединение типов <literal>T</literal>, <literal>U</literal> и <literal>V</literal>,
будет записано как <literal>T|U|V</literal>.
Если при объединении типов добавляют пересечение типов,
то пересечение типов берут в скобки для записи
в дизъюнктивной нормальной форме (DNF): <literal>T|(X&amp;Y)</literal>.
</para>
</sect3>
</sect2>
<sect2 xml:id="language.types.type-system.alias">
<title>Псевдонимы типов</title>
<para>
PHP поддерживает два псевдонима типов: <type>mixed</type> и
<type>iterable</type>, которые соответствуют (в том же порядке)
<link linkend="language.types.type-system.composite.union">объединению типов</link>
<literal>object|resource|array|string|float|int|bool|null</literal>
и <literal>Traversable|array</literal>.
</para>
<note>
<simpara>
PHP не поддерживает определяемые пользователем псевдонимы типов.
</simpara>
</note>
</sect2>
</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
-->