-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathexit.xml
237 lines (219 loc) · 7.37 KB
/
exit.xml
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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 2aaaf1967f2510471b694daf8e41a419fc98b751 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi -->
<refentry xml:id="function.exit" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>exit</refname>
<refpurpose>ステータスコードかメッセージを返して現在のスクリプトを終了する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>never</type><methodname>exit</methodname>
<methodparam choice="opt"><type class="union"><type>string</type><type>int</type></type><parameter>status</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
<simpara>
スクリプトの実行を終了します。
<link linkend="function.register-shutdown-function">シャットダウン関数</link>
や <link linkend="language.oop5.decon.destructor">オブジェクトのデストラクタ</link>
は、<function>exit</function> がコールされた場合にも実行されます。
ただし、&finally; ブロックは実行されません。
</simpara>
<simpara>
終了コード <literal>0</literal> は、そのタスクでプログラムが成功したことを表します。
他の値は、実行中に何らかのエラーが発生したことを表します。
</simpara>
<simpara>
<function>exit</function> は特殊な関数です。
パーサーに専用のトークンがあるため、文として使用して(つまり、括弧なしで)、
デフォルトのステータスコードでスクリプトを終了させることができます。
</simpara>
<caution>
<simpara>
グローバルな <function>exit</function> を無効にしたり、
名前空間つきの関数でシャドーイングすることはできません。
</simpara>
</caution>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>status</parameter></term>
<listitem>
<simpara>
<parameter>status</parameter> が文字列の場合は、
この関数は終了直前に <parameter>status</parameter> を表示します。
PHP によって返される終了コードは <literal>0</literal> です。
</simpara>
<para>
<parameter>status</parameter> が <type>int</type> の場合は、
この関数は終了直前に <parameter>status</parameter> を表示します。
<note>
<simpara>
終了コードは <literal>0</literal> から <literal>254</literal> の範囲でなければならず、
終了コード <literal>255</literal> は PHP によって予約されているため使用できません。
</simpara>
</note>
</para>
<warning>
<simpara>
PHP 8.4.0 より前のバージョンでは、 <function>exit</function> は PHP の標準的な
<link linkend="language.types.type-juggling.function">型の相互変換のセマンティクス</link>に基づいておらず、
また、<link linkend="language.types.declarations.strict"><literal>strict_types</literal></link> 宣言も適用されませんでした。
</simpara>
<simpara>
また、<type>resource</type> や <type>array</type> を含む、<type>int</type> 型以外の値は
<type>string</type> にキャストされていました。
PHP 8.4.0 以降は、通常の型の相互変換が適用され、無効な値に対しては
<exceptionname>TypeError</exceptionname> をスローします。
</simpara>
</warning>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<simpara>
この関数は PHP スクリプトを終了するため、値を返すことはありません。
</simpara>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.4.0</entry>
<entry>
<function>exit</function> は言語構造から正式な関数になったので、
通常の
<link linkend="language.types.type-juggling.function">型の相互変換</link>
に従い、
<link linkend="language.types.declarations.strict"><literal>strict_types</literal></link>
宣言も適用されるようになりました。また、名前付き引数や
<link linkend="functions.variable-functions">可変関数</link>
によって呼び出すこともできるようになりました。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title><function>exit</function> の基本的な使用例</title>
<programlisting role="php">
<![CDATA[
<?php
// exit program normally
exit();
exit(0);
// exit with an error code
exit(1);
?>
]]>
</programlisting>
</example>
<example>
<title><function>exit</function> に<type>string</type>を渡す例</title>
<programlisting role="php">
<![CDATA[
<?php
$filename = '/path/to/data-file';
$file = fopen($filename, 'r')
or exit("unable to open file ($filename)");
?>
]]>
</programlisting>
</example>
<example>
<title>シャットダウン関数やデストラクタが実行される例</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
public function __destruct()
{
echo 'Destruct: ' . __METHOD__ . '()' . PHP_EOL;
}
}
function shutdown()
{
echo 'Shutdown: ' . __FUNCTION__ . '()' . PHP_EOL;
}
$foo = new Foo();
register_shutdown_function('shutdown');
exit();
echo 'これは出力されません。';
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Shutdown: shutdown()
Destruct: Foo::__destruct()
]]>
</screen>
</example>
<example>
<title>文としての <function>exit</function></title>
<programlisting role="php">
<![CDATA[
<?php
// exit program normally with exit code 0
exit;
?>
]]>
</programlisting>
</example>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<simpara>
PHP 8.4.0 より前は、 <function>exit</function> は関数ではなく言語構造でした。
したがって、 <link linkend="functions.variable-functions">可変関数</link> や <link linkend="functions.named-arguments">名前付き引数</link> を使って関数を呼び出すことはできませんでした。
</simpara>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<simplelist>
<member><function>register_shutdown_function</function></member>
<member><link linkend="function.register-shutdown-function">シャットダウン関数</link></member>
<member><link linkend="language.oop5.decon.destructor">オブジェクトのデストラクタ</link></member>
</simplelist>
</refsect1>
</refentry>
<!-- 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
-->