forked from php/doc-ja
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconstants.xml
More file actions
392 lines (362 loc) · 14.1 KB
/
Copy pathconstants.xml
File metadata and controls
392 lines (362 loc) · 14.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 6e885e52412ad979aa5fbb620bb84e886fc0ebe8 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi,mumumu -->
<chapter xml:id="language.constants" xmlns="http://docbook.org/ns/docbook" annotations="interactive">
<title>定数</title>
<simpara>
定数は、値のためのID(名前)です。この名前が示すように、定数の値は
スクリプト実行中に変更できません (<link
linkend="language.constants.magic">マジック定数</link>
は例外です。これは実際は定数ではありません)。
定数は大文字小文字を区別します。慣習的に、
定数は常に大文字で表記されます。
</simpara>
<note>
<para>
PHP 8.0.0 より前のバージョンでは、
<function>define</function> 関数を使って定義された定数は、
大文字小文字を区別しない場合がありました。
</para>
</note>
<para>
定数の名前は、PHP のラベルと同じ規則に従います。有効な定数の名前は、
文字またはアンダースコアで始まり、任意の数の文字、数字、
アンダースコアが後に続きます。正規表現で示すと次のようになります。
<code>^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>
</para>
<para>
<function>define</function> 関数を使うと、
予約語や有効でない名前の定数を定義することが可能です。
この場合の定数の値は <function>constant</function> 関数によってのみ取得できますが、
このような使い方は推奨できません。
</para>
&tip.userlandnaming;
<para>
<!-- TODO Move into syntax section? -->
<example>
<title>有効/無効な定数名の例</title>
<programlisting role="php" annotations="non-interactive">
<![CDATA[
<?php
// 有効な定数名
define("FOO", "something");
define("FOO2", "something else");
define("FOO_BAR", "something more");
// 無効な定数名
define("2FOO", "something");
// 有効だが、避けるべき。
// 将来 PHP に定数の予約語が追加された場合に
// スクリプトが動作しなくなる可能性がある
define("__FOO__", "something");
]]>
</programlisting>
</example>
</para>
<note>
<simpara>
本節の目的においては、文字は a-z, A-Z, および128から255まで
(0x80-0xff)のASCII文字を指します。
</simpara>
</note>
<simpara>
&link.superglobals;と同様に定数のスコープはグローバルです。
つまり、スコープによらずスクリプトの中ではどこでも定数に
アクセスできます。スコープの詳細についてはマニュアルの
<link linkend="language.variables.scope">変数のスコープ</link>
をご覧ください。
</simpara>
<note>
<simpara>
PHP 7.1.0 以降では、クラス定数は protected または private として宣言でき、
それが定義されたクラス階層のスコープでのみ利用可能にすることができます。
</simpara>
</note>
<sect1 xml:id="language.constants.syntax">
<title>構文</title>
<simpara>
<literal>const</literal> キーワードか、
<function>define</function> 関数を使うことで、定数を宣言することが出来ます。
<function>define</function> を使えば任意の式を使って定数を定義できますが、
<literal>const</literal> キーワードを使う場合には、
次の段落で説明する制約があります。
定数が一度定義されると、
変更または未定義とすることはできません。
</simpara>
<simpara>
<literal>const</literal> キーワードで定数に指定できるのは、スカラー式
(<type>bool</type>, <type>int</type>,
<type>float</type>, <type>string</type>) と、
スカラー式だけを含んだ <type>array</type> の定数です。
<type>resource</type> の定数を指定することもできますが、
予期せぬ結果を引き起こすことがあるので避けるべきです。
</simpara>
<simpara>
単に定数の名前を指定することにより、その値を得ることが可能です。
変数とは異なり、その前に <literal>$</literal> は<emphasis>不要</emphasis>です。
定数の名前を動的に得る必要がある場合、定数の値を読むために関数
<function>constant</function> を使用することも可能です。
定義済の定数の一覧を得るには、
<function>get_defined_constants</function> を使用してください。
</simpara>
<note>
<simpara>
定数と(グローバル)変数は、異なる名前空間にあります。
例えば、&true; と <varname>$TRUE</varname> は違うものを意味します。
</simpara>
</note>
<simpara>
未定義の定数を使用した場合、<classname>Error</classname> がスローされます。
PHP 8.0.0 より前のバージョンでは、
未定義の定数は、ちょうど<type>string</type>として
コールしたかのように(CONSTANT vs "CONSTANT")、
PHPはその定数自体の名前を使用したと解釈していました。
このような振る舞いは、PHP 7.2.0
以降では非推奨となり、<constant>E_WARNING</constant>
が発生するようになりました。
(それより前のバージョンでは、
<link linkend="ref.errorfunc">E_NOTICE</link> が発生していました)
(<literal>bar</literal>が定数でなければ) なぜ
<link linkend="language.types.array.foo-bar">$foo[bar]</link>が間違っている
のかというマニュアルもご覧ください。
これは <link
linkend="language.namespaces.rules">完全修飾形式の定数</link>
には適用されず、この場合は未定義なら <classname>Error</classname> が発生します。
</simpara>
<note>
<simpara>
定数が設定されているかを確認するには、<function>defined</function> 関数を使って下さい。
</simpara>
</note>
<para>
変数との違いは次のようになります。
<itemizedlist>
<listitem>
<simpara>
定数は、前にドル記号(<literal>$</literal>)を要しません。
</simpara>
</listitem>
<listitem>
<simpara>
定数は、定義することができ、変数のスコープ規則に関係なく、あら
ゆる場所からアクセス可能です。
</simpara>
</listitem>
<listitem>
<simpara>
定数は一度設定されると再定義または未定義とすることはできません。
</simpara>
</listitem>
<listitem>
<simpara>
定数は、スカラー値と配列としてのみ評価可能です。
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
<example>
<title>定数の定義</title>
<programlisting role="php">
<![CDATA[
<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // "Hello world."を出力
echo Constant; // エラーが発生: Undefined constant "Constant"
// PHP 8.0.0 より前のバージョンでは、"Constant" を出力し、警告が発生
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title><literal>const</literal> キーワードによる定数の定義</title>
<programlisting role="php">
<![CDATA[
<?php
// 単純なスカラー値
const CONSTANT = 'Hello World';
echo CONSTANT . "\n";
// スカラー式
const ANOTHER_CONST = CONSTANT . '; Goodbye World';
echo ANOTHER_CONST . "\n";
const ANIMALS = array('dog', 'cat', 'bird');
echo ANIMALS[1] . "\n"; // 出力は "cat"
// 配列の定数
define('ANIMALS_DEF', array(
'dog',
'cat',
'bird'
));
echo ANIMALS_DEF[1] . "\n"; // 出力は "cat"
]]>
</programlisting>
</example>
</para>
<note>
<para>
<function>define</function> による定数の定義とは反対に、
<literal>const</literal> キーワードで定義した定数はトップレベルのスコープで宣言しなければなりません。
これはコンパイル時に定義されるからです。
つまり、関数、ループ、<literal>if</literal> 文、または
<literal>try</literal>/<literal>catch</literal> ブロックの内部では宣言できないということです。
</para>
</note>
<note>
<para>
PHP 8.0.0 より前のバージョンでは、<function>define</function> 関数を使って定義された定数は、
大文字小文字を区別しません。
</para>
</note>
<sect2 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.oop5.constants">クラス定数</link></member>
</simplelist>
</para>
</sect2>
</sect1>
<sect1 xml:id="language.constants.predefined">
<title>自動的に定義される定数</title>
<simpara>
PHPには実行されるスクリプトで使用可能な多くの
<link
linkend="reserved.constants">定義済みの定数</link>があります。
しかし、これらの定数の多くは、種々の拡張モジュールにより作成され、
動的なロードやコンパイル時の組込みにより、これらの拡張モジュールが
使用可能である場合にのみ定義されます。
</simpara>
</sect1>
<sect1 xml:id="language.constants.magic">
<title>マジック定数</title>
<para>
使われる場所によって値が変化する定数(マジック定数)がいくつかあります。
例えば、<constant>__LINE__</constant>はスクリプト上において
使われる行によって値が変化します。
これらの
"マジック"定数は、実行時に解決される通常の定数とは異なり、コンパイル時に解決されます。
これらの特別な定数は大文字小文字を区別しません。
内容は以下のとおりです:
</para>
<para>
<table>
<title>PHP の "マジック" 定数</title>
<tgroup cols="2">
<thead>
<row>
<entry>&Name;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row xml:id="constant.line">
<entry><constant>__LINE__</constant></entry>
<entry>
ファイル上の現在の行番号。
</entry>
</row>
<row xml:id="constant.file">
<entry><constant>__FILE__</constant></entry>
<entry>
ファイルのフルパスとファイル名 (シンボリックリンクを解決した後のもの)。
インクルードされるファイルの中で使用された場合、インクルードされるファイルの名前が返されます。
</entry>
</row>
<row xml:id="constant.dir">
<entry><constant>__DIR__</constant></entry>
<entry>
そのファイルの存在するディレクトリ。include の中で使用すると、
インクルードされるファイルの存在するディレクトリを返します。
つまり、これは <literal>dirname(__FILE__)</literal> と同じ意味です。
ルートディレクトリである場合を除き、ディレクトリ名の末尾にスラッシュはつきません。
</entry>
</row>
<row xml:id="constant.function">
<entry><constant>__FUNCTION__</constant></entry>
<entry>
関数名。無名関数の場合は、<literal>{closure}</literal>
</entry>
</row>
<row xml:id="constant.class">
<entry><constant>__CLASS__</constant></entry>
<entry>
クラス名。
クラス名には、そのクラスが宣言されている名前空間も含みます
(例 <literal>Foo\Bar</literal>)。
トレイトのメソッド内で <constant>__CLASS__ </constant> を使うと、
そのトレイトを use しているクラスの名前を返します。
</entry>
</row>
<row xml:id="constant.trait">
<entry><constant>__TRAIT__</constant></entry>
<entry>
トレイト名。
トレイト名には、宣言された名前空間も含みます
(例 <literal>Foo\Bar</literal>)。
</entry>
</row>
<row xml:id="constant.method">
<entry><constant>__METHOD__</constant></entry>
<entry>
クラスのメソッド名。
</entry>
</row>
<row xml:id="constant.property">
<entry><constant>__PROPERTY__</constant></entry>
<entry>
プロパティ名。
<link linkend="language.oop5.property-hooks">プロパティフック</link>
の内部でのみ使用可能です。
</entry>
</row>
<row xml:id="constant.namespace">
<entry><constant>__NAMESPACE__</constant></entry>
<entry>
現在の名前空間の名前。
</entry>
</row>
<row xml:id="constant.coloncolonclass">
<entry><constant><replaceable>ClassName</replaceable>::class</constant></entry>
<entry>
完全に修飾されたクラス名。
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<sect2 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.oop5.basic.class.class">::class</link></member>
<member><function>get_class</function></member>
<member><function>get_object_vars</function></member>
<member><function>file_exists</function></member>
<member><function>function_exists</function></member>
</simplelist>
</para>
</sect2>
</sect1>
</chapter>
<!-- 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
-->