1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-27 00:22:08 +01:00
Files
archived-doc-ja/language/types/type-system.xml
2025-08-24 19:47:46 +09:00

230 lines
7.6 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f908fff129bcd8ec1605658e06457cb04e5b2b51 Maintainer: mumumu Status: ready -->
<sect1 xml:id="language.types.type-system">
<title>型システム</title>
<para>
PHP は部分型の関係を満たしつつ(behavioral subtyping)、
名前ベースで一致を調べる型システム(nominal type system) を採用しています。
部分型の関係はコンパイル時にチェックされますが、
型の検証は実行時に動的に行われます。
</para>
<para>
PHP の型システムは、様々な基本型(atomic type)をサポートしており、
それらを組み合わせてより複雑な型を作ることができます。
そうした複雑な型の一部については、
<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>
Unit 型
</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">列挙型(Enum)</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>
値が <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">列挙型(Enum)</link>
を使うと、カスタムの型を定義することができます。
これらはユーザー定義型、またはクラス型と見なせます。
たとえば、<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>
union 型
</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>union 型</title>
<para>
union 型は、ひとつではなく、
複数の異なる型を値として受け入れることができます。
union 型を構成する個別の型は、<literal>|</literal> 記号で結合します。
よって、型 <literal>T</literal>, <literal>U</literal>,
<literal>V</literal> の union 型は <literal>T|U|V</literal> と書きます。
型のひとつが交差型の場合、<acronym>DNF</acronym> で記すために
括弧で囲む必要があります。
つまり、<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">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
-->