1
1
<?xml version =" 1.0" encoding =" utf-8" ?>
2
2
<!-- $Revision$ -->
3
- <!-- EN-Revision: 489d46bc2598784bd3711454ccab8940107cde67 Maintainer: takagi Status: ready -->
3
+ <!-- EN-Revision: dd87866772c31671146ff778140dc0955c55005c Maintainer: takagi Status: ready -->
4
4
<!-- CREDITS: hirokawa,mumumu,jdkfx -->
5
5
<chapter xml : id =" language.functions" xmlns =" http://docbook.org/ns/docbook" >
6
6
<title >関数</title >
9
9
<title >ユーザー定義関数</title >
10
10
11
11
<para >
12
- 関数は次のような構文で定義されます。
12
+ 関数は、<literal >function</literal > キーワードと関数の名前、
13
+ カンマ(<literal >,</literal >) で区切ったパラメーターのリスト
14
+ (空であっても構いません)を括弧で囲み、
15
+ 関数の本体を波括弧で囲んだものを続けて定義します。
16
+ たとえば、以下のようになります:
13
17
</para >
14
- <para >
15
- <example >
16
- <title >関数の使用法を説明するための擬似コード</title >
17
- <programlisting role =" php" >
18
+ <example >
19
+ <title ><literal >foo</literal > という名前の新しい関数を宣言する</title >
20
+ <programlisting role =" php" >
18
21
<![CDATA[
19
22
<?php
20
23
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
@@ -24,12 +27,27 @@ function foo($arg_1, $arg_2, /* ..., */ $arg_n)
24
27
}
25
28
?>
26
29
]]>
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
+
31
48
<simpara >
32
- 関数の中では、他の関数や <link linkend =" language.oop5.basic.class" >クラス</link >
49
+ 関数の本体の中では、
50
+ 他の関数や <link linkend =" language.oop5.basic.class" >クラス</link >
33
51
定義を含む PHP のあらゆる有効なコードを使用することができます。
34
52
</simpara >
35
53
<para >
@@ -174,15 +192,19 @@ function recursion($a)
174
192
</sect1 >
175
193
176
194
<sect1 xml : id =" functions.arguments" >
177
- <title >関数の引数 </title >
195
+ <title >関数のパラメーターと引数 </title >
178
196
179
197
<simpara >
198
+ 関数のパラメーターは、関数のシグネチャの中で宣言します。
180
199
引数のリストにより関数へ情報を渡すことができます。
181
200
このリストは、カンマで区切られた式のリストです。
182
201
引数の評価は、関数が実際にコールされる前に、
183
- 左から右の順番で行われます(<emphasis >先行</emphasis >評価)。
202
+ 左から右の順番で行われ、
203
+ 評価された結果が関数のパラメーターに代入されます
204
+ (<emphasis >先行</emphasis >評価)。
184
205
</simpara >
185
206
207
+ <!-- Note: this paragraph feels like it should be moved to the syntax part? -->
186
208
<para >
187
209
PHP は、値渡し(デフォルト)、
188
210
<link linkend =" functions.arguments.by-reference" >リファレンス渡し</link >、
@@ -192,29 +214,33 @@ function recursion($a)
192
214
<link linkend =" functions.named-arguments" >名前付き引数</link >
193
215
もサポートしています。
194
216
</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" >
199
223
<![CDATA[
200
224
<?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
+ );
205
229
?>
206
230
]]>
207
- </programlisting >
208
- </example >
209
- </para >
231
+ </programlisting >
232
+ </informalexample >
233
+ </para >
234
+ </note >
235
+
210
236
<para >
211
- PHP 8.0.0 以降では、引数リストの最後にカンマを付けることができます 。
237
+ PHP 8.0.0 以降では、関数のパラメーターリストの最後にカンマをつけることができます 。
212
238
このカンマは無視されます。
213
239
これは、引数リストや変数名が長かったりした場合に、
214
240
引数を縦に並べるのに便利です。
215
241
</para >
216
242
<example >
217
- <title >関数の引数リストの最後にカンマを付ける </title >
243
+ <title >関数のパラメーターリストの最後にカンマを付ける </title >
218
244
<programlisting role =" php" >
219
245
<![CDATA[
220
246
<?php
@@ -244,11 +270,11 @@ function takes_many_args(
244
270
</simpara >
245
271
<para >
246
272
関数の引数を常にリファレンス渡しとしたい場合には、関数定義において
247
- アンパサンド(& ) を引数名の前に付加することができます 。
273
+ アンパサンド(& ) をパラメーター名の前に付加することができます 。
248
274
</para >
249
275
<para >
250
276
<example >
251
- <title >関数のパラメータのリファレンス渡し </title >
277
+ <title >関数の引数のリファレンス渡し </title >
252
278
<programlisting role =" php" >
253
279
<![CDATA[
254
280
<?php
@@ -265,17 +291,17 @@ echo $str; // 出力は 'This is a string, and something extra.' となりま
265
291
</example >
266
292
</para >
267
293
<para >
268
- リファレンス渡しが想定されているところに、値渡しを行うとエラーになります 。
294
+ リファレンス渡しが想定されているところに、定数式を引数として渡すとエラーになります 。
269
295
</para >
270
296
</sect2 >
271
297
272
298
<sect2 xml : id =" functions.arguments.default" >
273
- <title >デフォルト引数値 </title >
299
+ <title >デフォルトのパラメーター値 </title >
274
300
275
301
<para >
276
302
関数は、変数に代入する記法に似たやり方で、
277
- デフォルト値を引数に定義することができます 。
278
- デフォルト値は引数が指定されなかった場合に使われますが 、
303
+ デフォルト値をパラメーターに定義することができます 。
304
+ デフォルト値はパラメーターに引数が指定されなかった場合に使われますが 、
279
305
&null; を渡した場合はデフォルト値を代入
280
306
<emphasis >しない</emphasis > ことに特に注意して下さい。
281
307
</para >
@@ -369,7 +395,7 @@ echo makecoffee(new FancyCoffeeMaker);
369
395
</para >
370
396
<para >
371
397
<example >
372
- <title >関数の引数のデフォルト値の 間違った使用法</title >
398
+ <title >関数のパラメーターのデフォルト値の 間違った使用法</title >
373
399
<programlisting role =" php" >
374
400
<![CDATA[
375
401
<?php
@@ -396,7 +422,7 @@ Fatal error: Uncaught ArgumentCountError: Too few arguments
396
422
</para >
397
423
<para >
398
424
<example >
399
- <title >関数の引数のデフォルト値の 正しい使用法</title >
425
+ <title >関数のパラメーターのデフォルト値の 正しい使用法</title >
400
426
<programlisting role =" php" >
401
427
<![CDATA[
402
428
<?php
@@ -448,19 +474,19 @@ Making a bowl of raspberry natural yogurt.
448
474
</para >
449
475
<para >
450
476
PHP 8.0.0 以降では、
451
- デフォルト値を指定した引数の後に 、
452
- 必須の引数を宣言することは <emphasis >推奨されません</emphasis >。
477
+ デフォルト値を指定したパラメーターの後に 、
478
+ 必須のパラメーターを宣言することは <emphasis >推奨されません</emphasis >。
453
479
なぜなら、そのデフォルト値は絶対に使われないからです。
454
480
これは、デフォルト値を削除することで解決できます。
455
481
このルールの唯一の例外は、
456
- <code >Type $param = null</code > と書かれた引数です 。
482
+ <code >Type $param = null</code > と書かれたパラメーターです 。
457
483
&null; をデフォルトにすることは、
458
484
型が暗黙のうちに nullable であることを示しています。
459
485
この使い方はPHP 8.4.0で非推奨となり、代わりに明示的な
460
486
<link linkend =" language.types.declarations.nullable" >nullable 型</link >
461
487
を使用する必要があります。
462
488
<example >
463
- <title >デフォルト値を指定した引数は、必須の引数の後に宣言する </title >
489
+ <title >デフォルト値を指定したパラメーターは、必須のパラメーターの後に宣言する </title >
464
490
<programlisting role =" php" >
465
491
<![CDATA[
466
492
<?php
@@ -487,7 +513,7 @@ Making a bowl of raspberry natural yogurt.
487
513
</note >
488
514
<note >
489
515
<simpara >
490
- リファレンス渡しの引数にもデフォルト値を指定できます 。
516
+ リファレンス渡しのパラメーターにもデフォルト値を指定できます 。
491
517
</simpara >
492
518
</note >
493
519
</sect2 >
@@ -500,7 +526,7 @@ Making a bowl of raspberry natural yogurt.
500
526
</simpara >
501
527
502
528
<para >
503
- 引数リストに
529
+ パラメーターリストに
504
530
<literal >...</literal > トークンを含めることで、
505
531
その関数が可変長の引数を受け取ることを示せます。
506
532
引数は、指定した変数に配列として渡されます:
@@ -561,7 +587,7 @@ echo add(...$a);
561
587
</para >
562
588
563
589
<para >
564
- 通常の引数を 、<literal >...</literal > の前に指定することもできます。
590
+ 通常のパラメーターを 、<literal >...</literal > の前に指定することもできます。
565
591
この場合は、通常の引数リストにマッチしなかったのこりの引数が
566
592
<literal >...</literal > による配列に追加されます。
567
593
</para >
@@ -693,20 +719,22 @@ htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401, 'UTF-8', fa
693
719
</example >
694
720
695
721
<para >
696
- 同じ引数を複数回渡すと、 Error 例外が発生します。
722
+ 同じ名前の引数を複数回渡すと、< classname > Error</ classname > 例外が発生します。
697
723
</para >
698
724
699
725
<example >
700
- <title >同じ引数を複数回渡すと 、Error がスローされる</title >
726
+ <title >同じ名前の引数を複数回渡すと 、Error がスローされる</title >
701
727
<programlisting role =" php" >
702
728
<![CDATA[
703
729
<?php
704
730
function foo($param) { ... }
705
731
706
732
foo(param: 1, param: 2);
707
733
// Error: Named parameter $param overwrites previous argument
734
+
708
735
foo(1, param: 2);
709
736
// Error: Named parameter $param overwrites previous argument
737
+
710
738
?>
711
739
]]>
712
740
</programlisting >
@@ -1409,6 +1437,13 @@ Warning: Cannot bind an instance to a static closure in %s on line %d
1409
1437
</row >
1410
1438
</thead >
1411
1439
<tbody >
1440
+ <row >
1441
+ <entry >8.3.0</entry >
1442
+ <entry >
1443
+ <link linkend =" language.oop5.magic" >マジックメソッド</link >
1444
+ 経由で作られたクロージャも、名前付き引数を受け入れるようになりました。
1445
+ </entry >
1446
+ </row >
1412
1447
<row >
1413
1448
<entry >7.1.0</entry >
1414
1449
<entry >
0 commit comments