PHP マニュアル
前のページ |  | 次のページ

# 第 17章関数

# ユーザー定義関数

関数は次のような構文で定義されます。

`<?php function foo($arg_1, $arg_2, /* ..., */ $arg_n) { echo "関数の例\n"; return $retval; } ?>`

関数の中では、他の関数や クラス 定義 を含む PHP のあらゆる有効なコードを使用することができます。

関数名は、PHP の他のラベルと同じ規則に従います。関数名として有効な 形式は、まず文字かアンダースコアで始まり、その後に任意の数の文字・ 数字・あるいはアンダースコアが続くものです。正規表現で表すと、 [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* となります。

PHP 3 では、関数は参照される前に定義されている必要がありました。 PHP 4 以降ではそのような制限はありません。 ただし以下の二つの例のように、条件付きで関数が 定義されるような場合を除きます。

次の二つの例のように、ある条件下でのみ関数が定義される場合には、 その関数定義は関数がコールされる前に 行われていなければなりません。

例 17-1. 条件つきの関数

`<?php $makefoo = true; /* ここでは関数foo()はまだ定義されていないので コールすることはできません。 しかし関数 bar()はコールできます。 */ bar(); if ($makefoo) { function foo() { echo "I don't exist until program execution reaches me.\n"; } } /* ここでは $makefooがtrueと評価されているため 安全にfoo()をコールすることができます。 */ if ($makefoo) foo(); function bar() { echo "I exist immediately upon program start.\n"; } ?>`

例 17-2. 関数の中の関数

`<?php function foo() { function bar() { echo "I don't exist until foo() is called.\n"; } } /* ここでは関数bar()はまだ定義されていないので コールすることはできません。 */ foo(); /* foo()の実行によって bar()が 定義されるためここではbar()を コールすることができます。*/ bar(); ?>`

PHP では、関数やクラスはすべてグローバルスコープにあります - 関数の内部で定義したものであっても関数の外部からコールできますし、 その逆も可能です。

PHP は関数のオーバーロードをサポートしていません。 また、宣言された関数の定義を取り消したり再定義することも できません。

> 注意: 関数名は大文字小文字を区別しませんが、通常は 関数宣言時と同じ名前で関数をコールする方が好ましいです。

PHP 3 では、引数のデフォルト値(詳細は、引数のデフォルト値を 参照ください)はサポートしていますが、関数の引数を可変とすることはで きません。PHP 4 以降は両方ともサポートしています。詳細は、 可変長引数リスト および func_num_args(), func_get_arg(), func_get_args() に関する関数リファレンスを 参照ください。

PHP では、関数を再帰的にコールすることが可能です。ただし、100 から 200 を超えるような再帰呼び出しは避けてください。そんなことをすると、 スタックが破壊され、スクリプトが異常終了してしまいます。

例 17-3. 再帰的な関数

`<?php function recursion($a) { if ($a < 20) { echo "$a\n"; recursion($a + 1); } } ?>`

前のページ | ホーム | 次のページ
include_once() | 上に戻る | 関数の引数