mirror of
https://github.com/php/doc-ja.git
synced 2026-03-27 00:22:08 +01:00
230 lines
7.6 KiB
XML
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>&</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>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&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
|
|
-->
|