11<?xml version =" 1.0" encoding =" utf-8" ?>
22<!-- $Revision$ -->
3- <!-- EN-Revision: 489d46bc2598784bd3711454ccab8940107cde67 Maintainer: takagi Status: ready -->
3+ <!-- EN-Revision: dd87866772c31671146ff778140dc0955c55005c Maintainer: takagi Status: ready -->
44<!-- CREDITS: hirokawa,mumumu,jdkfx -->
55 <chapter xml : id =" language.functions" xmlns =" http://docbook.org/ns/docbook" >
66 <title >関数</title >
99 <title >ユーザー定義関数</title >
1010
1111 <para >
12- 関数は次のような構文で定義されます。
12+ 関数は、<literal >function</literal > キーワードと関数の名前、
13+ カンマ(<literal >,</literal >) で区切ったパラメーターのリスト
14+ (空であっても構いません)を括弧で囲み、
15+ 関数の本体を波括弧で囲んだものを続けて定義します。
16+ たとえば、以下のようになります:
1317 </para >
14- <para >
15- <example >
16- <title >関数の使用法を説明するための擬似コード</title >
17- <programlisting role =" php" >
18+ <example >
19+ <title ><literal >foo</literal > という名前の新しい関数を宣言する</title >
20+ <programlisting role =" php" >
1821<![CDATA[
1922<?php
2023function foo($arg_1, $arg_2, /* ..., */ $arg_n)
@@ -24,12 +27,27 @@ function foo($arg_1, $arg_2, /* ..., */ $arg_n)
2427}
2528?>
2629]]>
27- </programlisting >
28- </example >
29- </para >
30-
30+ </programlisting >
31+ </example >
32+ <note >
33+ <para >
34+ PHP 8.0.0 以降では、
35+ パラメーターのリストの末尾に、カンマを付加できるようになっています:
36+ <informalexample >
37+ <programlisting role =" php" >
38+ <![CDATA[
39+ <?php
40+ function foo($arg_1, $arg_2,) { }
41+ ?>
42+ ]]>
43+ </programlisting >
44+ </informalexample >
45+ </para >
46+ </note >
47+
3148 <simpara >
32- 関数の中では、他の関数や <link linkend =" language.oop5.basic.class" >クラス</link >
49+ 関数の本体の中では、
50+ 他の関数や <link linkend =" language.oop5.basic.class" >クラス</link >
3351 定義を含む PHP のあらゆる有効なコードを使用することができます。
3452 </simpara >
3553 <para >
@@ -174,15 +192,19 @@ function recursion($a)
174192 </sect1 >
175193
176194 <sect1 xml : id =" functions.arguments" >
177- <title >関数の引数 </title >
195+ <title >関数のパラメーターと引数 </title >
178196
179197 <simpara >
198+ 関数のパラメーターは、関数のシグネチャの中で宣言します。
180199 引数のリストにより関数へ情報を渡すことができます。
181200 このリストは、カンマで区切られた式のリストです。
182201 引数の評価は、関数が実際にコールされる前に、
183- 左から右の順番で行われます(<emphasis >先行</emphasis >評価)。
202+ 左から右の順番で行われ、
203+ 評価された結果が関数のパラメーターに代入されます
204+ (<emphasis >先行</emphasis >評価)。
184205 </simpara >
185206
207+ <!-- Note: this paragraph feels like it should be moved to the syntax part? -->
186208 <para >
187209 PHP は、値渡し(デフォルト)、
188210 <link linkend =" functions.arguments.by-reference" >リファレンス渡し</link >、
@@ -192,29 +214,33 @@ function recursion($a)
192214 <link linkend =" functions.named-arguments" >名前付き引数</link >
193215 もサポートしています。
194216 </para >
195- <para >
196- <example >
197- <title >関数に配列を渡す</title >
198- <programlisting role =" php" >
217+ <note >
218+ <para >
219+ PHP 7.3.0 以降では、
220+ 関数コールの引数リストの末尾にも、カンマを付加できるようになっています:
221+ <informalexample >
222+ <programlisting role =" php" >
199223<![CDATA[
200224<?php
201- function takes_array($input)
202- {
203- echo "$input[0] + $input[1] = ", $input[0]+$input[1];
204- }
225+ $v = foo(
226+ $arg_1,
227+ $arg_2,
228+ );
205229?>
206230]]>
207- </programlisting >
208- </example >
209- </para >
231+ </programlisting >
232+ </informalexample >
233+ </para >
234+ </note >
235+
210236 <para >
211- PHP 8.0.0 以降では、引数リストの最後にカンマを付けることができます 。
237+ PHP 8.0.0 以降では、関数のパラメーターリストの最後にカンマをつけることができます 。
212238 このカンマは無視されます。
213239 これは、引数リストや変数名が長かったりした場合に、
214240 引数を縦に並べるのに便利です。
215241 </para >
216242 <example >
217- <title >関数の引数リストの最後にカンマを付ける </title >
243+ <title >関数のパラメーターリストの最後にカンマを付ける </title >
218244 <programlisting role =" php" >
219245<![CDATA[
220246<?php
@@ -244,11 +270,11 @@ function takes_many_args(
244270 </simpara >
245271 <para >
246272 関数の引数を常にリファレンス渡しとしたい場合には、関数定義において
247- アンパサンド(& ) を引数名の前に付加することができます 。
273+ アンパサンド(& ) をパラメーター名の前に付加することができます 。
248274 </para >
249275 <para >
250276 <example >
251- <title >関数のパラメータのリファレンス渡し </title >
277+ <title >関数の引数のリファレンス渡し </title >
252278 <programlisting role =" php" >
253279<![CDATA[
254280<?php
@@ -265,17 +291,17 @@ echo $str; // 出力は 'This is a string, and something extra.' となりま
265291 </example >
266292 </para >
267293 <para >
268- リファレンス渡しが想定されているところに、値渡しを行うとエラーになります 。
294+ リファレンス渡しが想定されているところに、定数式を引数として渡すとエラーになります 。
269295 </para >
270296 </sect2 >
271297
272298 <sect2 xml : id =" functions.arguments.default" >
273- <title >デフォルト引数値 </title >
299+ <title >デフォルトのパラメーター値 </title >
274300
275301 <para >
276302 関数は、変数に代入する記法に似たやり方で、
277- デフォルト値を引数に定義することができます 。
278- デフォルト値は引数が指定されなかった場合に使われますが 、
303+ デフォルト値をパラメーターに定義することができます 。
304+ デフォルト値はパラメーターに引数が指定されなかった場合に使われますが 、
279305 &null; を渡した場合はデフォルト値を代入
280306 <emphasis >しない</emphasis > ことに特に注意して下さい。
281307 </para >
@@ -369,7 +395,7 @@ echo makecoffee(new FancyCoffeeMaker);
369395 </para >
370396 <para >
371397 <example >
372- <title >関数の引数のデフォルト値の 間違った使用法</title >
398+ <title >関数のパラメーターのデフォルト値の 間違った使用法</title >
373399 <programlisting role =" php" >
374400<![CDATA[
375401<?php
@@ -396,7 +422,7 @@ Fatal error: Uncaught ArgumentCountError: Too few arguments
396422 </para >
397423 <para >
398424 <example >
399- <title >関数の引数のデフォルト値の 正しい使用法</title >
425+ <title >関数のパラメーターのデフォルト値の 正しい使用法</title >
400426 <programlisting role =" php" >
401427<![CDATA[
402428<?php
@@ -448,19 +474,19 @@ Making a bowl of raspberry natural yogurt.
448474 </para >
449475 <para >
450476 PHP 8.0.0 以降では、
451- デフォルト値を指定した引数の後に 、
452- 必須の引数を宣言することは <emphasis >推奨されません</emphasis >。
477+ デフォルト値を指定したパラメーターの後に 、
478+ 必須のパラメーターを宣言することは <emphasis >推奨されません</emphasis >。
453479 なぜなら、そのデフォルト値は絶対に使われないからです。
454480 これは、デフォルト値を削除することで解決できます。
455481 このルールの唯一の例外は、
456- <code >Type $param = null</code > と書かれた引数です 。
482+ <code >Type $param = null</code > と書かれたパラメーターです 。
457483 &null; をデフォルトにすることは、
458484 型が暗黙のうちに nullable であることを示しています。
459485 この使い方はPHP 8.4.0で非推奨となり、代わりに明示的な
460486 <link linkend =" language.types.declarations.nullable" >nullable 型</link >
461487 を使用する必要があります。
462488 <example >
463- <title >デフォルト値を指定した引数は、必須の引数の後に宣言する </title >
489+ <title >デフォルト値を指定したパラメーターは、必須のパラメーターの後に宣言する </title >
464490 <programlisting role =" php" >
465491<![CDATA[
466492 <?php
@@ -487,7 +513,7 @@ Making a bowl of raspberry natural yogurt.
487513 </note >
488514 <note >
489515 <simpara >
490- リファレンス渡しの引数にもデフォルト値を指定できます 。
516+ リファレンス渡しのパラメーターにもデフォルト値を指定できます 。
491517 </simpara >
492518 </note >
493519 </sect2 >
@@ -500,7 +526,7 @@ Making a bowl of raspberry natural yogurt.
500526 </simpara >
501527
502528 <para >
503- 引数リストに
529+ パラメーターリストに
504530 <literal >...</literal > トークンを含めることで、
505531 その関数が可変長の引数を受け取ることを示せます。
506532 引数は、指定した変数に配列として渡されます:
@@ -561,7 +587,7 @@ echo add(...$a);
561587 </para >
562588
563589 <para >
564- 通常の引数を 、<literal >...</literal > の前に指定することもできます。
590+ 通常のパラメーターを 、<literal >...</literal > の前に指定することもできます。
565591 この場合は、通常の引数リストにマッチしなかったのこりの引数が
566592 <literal >...</literal > による配列に追加されます。
567593 </para >
@@ -693,20 +719,22 @@ htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, 'UTF-8', fa
693719 </example >
694720
695721 <para >
696- 同じ引数を複数回渡すと、 Error 例外が発生します。
722+ 同じ名前の引数を複数回渡すと、< classname > Error</ classname > 例外が発生します。
697723 </para >
698724
699725 <example >
700- <title >同じ引数を複数回渡すと 、Error がスローされる</title >
726+ <title >同じ名前の引数を複数回渡すと 、Error がスローされる</title >
701727 <programlisting role =" php" >
702728<![CDATA[
703729<?php
704730function foo($param) { ... }
705731
706732foo(param: 1, param: 2);
707733// Error: Named parameter $param overwrites previous argument
734+
708735foo(1, param: 2);
709736// Error: Named parameter $param overwrites previous argument
737+
710738?>
711739]]>
712740 </programlisting >
@@ -1409,6 +1437,13 @@ Warning: Cannot bind an instance to a static closure in %s on line %d
14091437 </row >
14101438 </thead >
14111439 <tbody >
1440+ <row >
1441+ <entry >8.3.0</entry >
1442+ <entry >
1443+ <link linkend =" language.oop5.magic" >マジックメソッド</link >
1444+ 経由で作られたクロージャも、名前付き引数を受け入れるようになりました。
1445+ </entry >
1446+ </row >
14121447 <row >
14131448 <entry >7.1.0</entry >
14141449 <entry >
0 commit comments