| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
関数の引数引数のリストにより関数へ情報を渡すことができます。 このリストは、カンマで区切られた式のリストです。 引数の評価は、左から右の順番で行われます。 PHP は、値渡し(デフォルト)、 参照渡し、 デフォルト引数値 をサポートしています。また、 可変長引数リスト もサポートしてます。
例1 関数に配列を渡す
<?php 引数の参照渡しデフォルトで、関数の引数は値で渡されます。(このため、関数の内部で 引数の値を変更しても関数の外側では値は変化しません。)関数がその引 数を修正できるようにするには、その引数を参照渡しとする必要があり ます。 関数の引数を常に参照渡しとしたい場合には、関数定義において アンパサンド(&) を引数名の前に付加することができます。
例2 関数のパラメータの参照渡し
<?php デフォルト引数値関数は、スカラー引数に関して次のように C++ スタイルのデフォルト値を 定義することができます。
例3 関数におけるデフォルトパラメータの使用法
<?php 上の例の出力は以下となります。 Making a cup of cappuccino. Making a cup of . Making a cup of espresso.
PHPでは、配列および特殊な型
例4 スカラー型以外をデフォルト値として使用する
<?php デフォルト値は、定数式である必要があり、 (例えば) 変数やクラスのメンバーであってはなりません。 引数のデフォルト値を使用する際には、デフォルト値を有する引数はデ フォルト値がない引数の右側に全てある必要があることに注意して下さ い。そうでない場合、意図したような動作が行われません。次の簡単な コードを見てみましょう。
例5 関数の引数のデフォルト値の 間違った使用法
<?php 上の例の出力は以下となります。 Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/phptest/functest.html on line 41 Making a bowl of raspberry . ここで、上の例を次のコードと比べてみましょう。
例6 関数の引数のデフォルト値の 正しい使用法
<?php 上の例の出力は以下となります。 Making a bowl of acidophilus raspberry.
型宣言
型宣言を使うと、、関数を呼ぶ際に渡すパラメータが特定の型であることを、関数の宣言時に要求できるようになります。 関数に渡された値が不正な型であった場合はエラーとなります。 PHP 5 では、このエラーは recoverable fatal error でした。 PHP 7 では、この場合に TypeError 例外をスローします。
型宣言を指定するには、型の名前をパラメータ名の前に追加します。
パラメータのデフォルト値が 有効な型
警告
これらのスカラー方のエイリアスはサポートしていません。 エイリアスは、クラス名あるいはインターフェイス名として解釈されます。 つまり、パラメータや返り値の型として boolean を用いると、 bool であることを宣言したのではなく boolean クラス (あるいはインターフェイス) のインスタンスであると宣言したことになります。
<?php 上の例の出力は以下となります。 Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of boolean, boolean given, called in - on line 1 and defined in -:1 例例7 クラスの型宣言の基本例
<?php 上の例の出力は以下となります。 C D Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of C, instance of E given, called in - on line 14 and defined in -:8 Stack trace: #0 -(14): f(Object(E)) #1 {main} thrown in - on line 8 例8 インターフェイスの型宣言の基本例
<?php 上の例の出力は以下となります。 C Fatal error: Uncaught TypeError: Argument 1 passed to f() must implement interface I, instance of E given, called in - on line 13 and defined in -:8 Stack trace: #0 -(13): f(Object(E)) #1 {main} thrown in - on line 8 例9 Null を許可する型宣言
<?php 上の例の出力は以下となります。 object(C)#1 (0) { } NULL 強い型付けデフォルトでは、間違った型を渡された場合でも、可能な限りは来されている型に変換します。 たとえば、string を想定している関数のパラメータに integer が渡された場合は、その値を string 型として受け取ります。 ファイル単位で厳密な型チェックを有効にすることもできます。 この場合は、宣言されたとおりの型でない限りは受け付けず、 TypeError をスローします。 ただし、float が指定されているところに integer を渡した場合だけは例外です。 組み込み関数内からの関数呼び出しは、 strict_types 宣言の影響を受けません。 厳密な型チェックを有効にするには、declare 文を用いて strict_types を宣言します。 警告
厳密な型チェックを有効にすると、 戻り値の型宣言 にも影響を及ぼします。
例10 厳密な型チェック
<?php 上の例の出力は以下となります。 int(3) Fatal error: Uncaught TypeError: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 9 and defined in -:4 Stack trace: #0 -(9): sum(1.5, 2.5) #1 {main} thrown in - on line 4 例11 弱い型チェック
<?php 上の例の出力は以下となります。 int(3) int(3) 例12 TypeError の捕捉
<?php 上の例の出力は以下となります。 int(3) Error: Argument 1 passed to sum() must be of the type integer, float given, called in - on line 10 可変長引数リストPHP は、可変長引数をユーザー定義関数でサポートしています。 PHP 5.6 以降では ... を使って実装されており、 PHP 5.5 以前では func_num_args(), func_get_arg(), func_get_args() 関数を使用します。 PHP 5.6 以降における ...PHP 5.6 以降では、引数リストに ... トークンを含めることで、 その関数が可変長の引数を受け取ることを示せます。 引数は、指定した変数に配列として渡されます。次の例を参照ください。 例13 ... を使った、可変長引数へのアクセス
<?php 上の例の出力は以下となります。 10 関数を呼び出すときに ... を使うと、 配列変数や Traversable クラスを引数リストに含めることができます。 例14 引数での ... の使用例
<?php 上の例の出力は以下となります。 3 3 通常の引数を、... の前に指定することもできます。 この場合は、通常の引数リストにマッチしなかったのこりの引数が ... による配列に追加されます。 ... トークンの前に、 タイプヒント を付加することもできます。 タイプヒントがある場合、... が取り込むすべての引数はそのヒントに従わなければいけません。 例15 タイプヒントつきの可変長引数
<?php 上の例の出力は以下となります。 3 days Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2 可変長引数の 参照渡し もできます。その場合は、... の前にアンパサンド (&) を付加します。 古いバージョンの PHP可変長引数に関して特別な構文は必要としません。しかし、関数の引数にアクセスするには func_num_args()、func_get_arg() および func_get_args() といった関数を使う必要があります。 先ほどの最初の例を、PHP 5.5 以前のバージョンで実装すると、以下のようになります。 例16 可変長引数へのアクセス (PHP 5.5 以前)
<?php 上の例の出力は以下となります。 10 |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「関数の引数」をGoogle検索
|