Skip to content

Commit b1d5fe0

Browse files
committed
sync with en / Add information about type declarations to Class Constants
php/doc-en@922b4b5
1 parent 24005b8 commit b1d5fe0

File tree

1 file changed

+117
-19
lines changed

1 file changed

+117
-19
lines changed

language/oop5/constants.xml

Lines changed: 117 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<!-- $Revision$ -->
3-
<!-- EN-Revision: fc174e8d6162091550edde46159917ee7e5a2e73 Maintainer: hirokawa Status: ready -->
4-
<!-- CREDITS: shimooka -->
3+
<!-- EN-Revision: 922b4b5aeb327d78ea1bb4b932e5db2e9a03ffc5 Maintainer: mumumu Status: ready -->
54
<sect1 xml:id="language.oop5.constants" xmlns="http://docbook.org/ns/docbook">
65
<title>クラス定数</title>
76
<para>
8-
値が変更できない <link linkend="language.constants">定数</link> をクラス内に定義することができます。
9-
クラス定数のデフォルトのアクセス範囲は <literal>public</literal> です。
10-
</para>
7+
値が変更できない <link linkend="language.constants">定数</link> をクラス内に定義することができます。
8+
クラス定数のデフォルトのアクセス範囲は <literal>public</literal> です。
9+
</para>
1110
<note>
1211
<para>
1312
クラス定数は、子クラスで再定義することもできます。
@@ -16,22 +15,27 @@
1615
</para>
1716
</note>
1817
<para>
19-
インターフェイスに定数を持たせることもできます。
20-
<link linkend="language.oop5.interfaces">インターフェイスについてのドキュメント</link>
21-
で例を御覧ください。
22-
</para>
23-
<para>
24-
変数を用いてクラスを参照することも可能です。
25-
変数の値に (<literal>self</literal> や <literal>parent</literal>、
26-
<literal>static</literal> といった)
27-
キーワードを指定することはできません。
28-
</para>
18+
インターフェイスに定数を持たせることもできます。
19+
<link linkend="language.oop5.interfaces">インターフェイスについてのドキュメント</link>
20+
で例を御覧ください。
21+
</para>
22+
<para>
23+
変数を用いてクラスを参照することも可能です。
24+
変数の値に (<literal>self</literal> や <literal>parent</literal>、
25+
<literal>static</literal> といった)
26+
キーワードを指定することはできません。
27+
</para>
2928
<para>
3029
クラス定数はクラス単位で割り当てられるものです。インスタンス単位ではないことに注意しましょう。
3130
</para>
32-
<example>
31+
<para>
32+
PHP 8.3.0 以降では、クラス定数は <literal>bool</literal>,
33+
<literal>int</literal>, <literal>float</literal>, <literal>string</literal>, <literal>array</literal> のようなスカラー型を持つことができます。
34+
<literal>array</literal> を使う場合、その内容は他のスカラー型に限ります。
35+
</para>
36+
<example>
3337
<title>定数の定義と使用</title>
34-
<programlisting role="php">
38+
<programlisting role="php">
3539
<![CDATA[
3640
<?php
3741
class MyClass
@@ -56,7 +60,6 @@ echo $class::CONSTANT."\n";
5660
]]>
5761
</programlisting>
5862
</example>
59-
6063
<para>
6164
特別な <constant>::class</constant> 定数を使うと、
6265
コンパイル時の完全修飾クラス名が解決できます。
@@ -77,13 +80,13 @@ namespace foo {
7780
]]>
7881
</programlisting>
7982
</example>
83+
8084
<example>
8185
<title>クラス内での定数式の例</title>
8286
<programlisting role="php">
8387
<![CDATA[
8488
<?php
8589
const ONE = 1;
86-
8790
class foo {
8891
const TWO = ONE * 2;
8992
const THREE = ONE + self::TWO;
@@ -122,6 +125,101 @@ Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
122125
PHP 7.1.0 以降は、クラス定数のアクセス範囲を指定できるようになりました。
123126
</para>
124127
</note>
128+
<example>
129+
<title>PHP 8.3.0 以降で行われる、クラス定数のアクセス権の関係チェック</title>
130+
<programlisting role="php">
131+
<![CDATA[
132+
<?php
133+
134+
interface MyInterface
135+
{
136+
public const VALUE = 42;
137+
}
138+
139+
class MyClass implements MyInterface
140+
{
141+
protected const VALUE = 42;
142+
}
143+
?>
144+
]]>
145+
</programlisting>
146+
&example.outputs.83;
147+
<screen>
148+
<![CDATA[
149+
Fatal error: Access level to MyClass::VALUE must be public (as in interface MyInterface) …
150+
]]>
151+
</screen>
152+
</example>
153+
<note>
154+
<simpara>
155+
PHP 8.3.0 以降では、アクセス権の関係がより厳密にチェックされるようになりました。
156+
これより前のバージョンでは、
157+
クラス定数のアクセス権は、インターフェイスを実装した側の定数のそれと異なっていても問題ありませんでした。
158+
</simpara>
159+
</note>
160+
<example>
161+
<title>PHP 8.3.0 以降で有効な、クラス定数を取得する文法</title>
162+
<programlisting role="php">
163+
<![CDATA[
164+
<?php
165+
class Foo {
166+
public const BAR = 'bar';
167+
private const BAZ = 'baz';
168+
}
169+
170+
$name = 'BAR';
171+
echo Foo::{$name}, PHP_EOL; // bar
172+
?>
173+
]]>
174+
</programlisting>
175+
</example>
176+
<note>
177+
<para>
178+
PHP 8.3.0 以降では、クラス定数は変数を使って動的に取得できます。
179+
</para>
180+
</note>
181+
<example>
182+
<title>PHP 8.3.0 以降で有効な、クラス定数の型付け</title>
183+
<programlisting role="php">
184+
<![CDATA[
185+
<?php
186+
187+
class MyClass {
188+
public const bool MY_BOOL = true;
189+
public const int MY_INT = 1;
190+
public const float MY_FLOAT = 1.01;
191+
public const string MY_STRING = 'one';
192+
public const array MY_ARRAY = [self::MY_BOOL, self::MY_INT, self::MY_FLOAT, self::MY_STRING];
193+
}
194+
195+
var_dump(MyClass::MY_BOOL);
196+
var_dump(MyClass::MY_INT);
197+
var_dump(MyClass::MY_FLOAT);
198+
var_dump(MyClass::MY_STRING);
199+
var_dump(MyClass::MY_ARRAY);
200+
?>
201+
]]>
202+
</programlisting>
203+
&example.outputs.83;
204+
<screen>
205+
<![CDATA[
206+
bool(true)
207+
int(1)
208+
float(1.01)
209+
string(3) "one"
210+
array(4) {
211+
[0]=>
212+
bool(true)
213+
[1]=>
214+
int(1)
215+
[2]=>
216+
float(1.01)
217+
[3]=>
218+
string(3) "one"
219+
}
220+
]]>
221+
</screen>
222+
</example>
125223
</sect1>
126224
<!-- Keep this comment at the end of the file
127225
Local variables:

0 commit comments

Comments
 (0)