mirror of
https://github.com/php/doc-ru.git
synced 2026-03-24 07:42:22 +01:00
228 lines
8.8 KiB
XML
228 lines
8.8 KiB
XML
<?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>&</literal>.
|
||
Поэтому пересечение типов <literal>T</literal>, <literal>U</literal> и <literal>V</literal>
|
||
записывает как <literal>T&U&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&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
|
||
-->
|