PHP:関数
●概要
関数も使用できます。
// 関数の定義
function test($a, $b) {
echo $a.' '.$b.'<br>';
return 10;
}
// 関数を使う
$result = test("function", "test");
echo $result;
のようにします。
test が関数名で、$a と $b が引数です。
引数はいくつでも構いません。
return 10 で呼び出し元にデータを返しています。
return 値には連想配列も使えるので、
複数のデータをまとめて返すのも簡単です。
●デフォルト引数
引数にはデフォルト値を指定できます。
引数 = デフォルト値
とします。
function test($a, $b="default") {
}
test("function");
で呼び出すと、
$b には、関数側で定義した "default" が入ります。
引数を省略できるのは、
右端から連続した引数だけです。
test(/* 指定しない */, "function"); は使えません。
●リファレンス渡し
通常、引数で渡したデータを変更しても、
その変更が有効なのは、その関数の中だけです。
# 関数内部の操作で、呼び出し元の変数は変化しません。
が、
引数の前に & を付ける事で、
呼び出し元の引数の値を変更できます。
// 関数の定義
function test(&$a) { // $num と $a が結びつく
$a += 10; // $num を +10 したのと同様
}
$num = 1;
test($num);
echo $num;
呼び出し元 $num に 1 を入れて、関数 test を呼びます。
&$a によって、$num と $a が結び付けられます。
関数内部で $a を変更する事で、
$num そのものを変更する事と同じになります。
●変数のスコープと global
変数には、スコープ (変数の改変・参照できる範囲) があります。
PHP には、変数の宣言がないので、
変数のスコープは、その変数が初めて登場した場所で決まります。
例えば、
$a = 1; // グローバル
function test() {
echo $a; // ローカル (新規変数として扱われる)
}
test();
上記の場合、
ローカルの $a と、グローバルの $a は別の変数です。
関数 test 内の $a は、新規変数になるので、
値は、NULL のままです。
この振る舞いは、C言語とは全く異なります。
関数 test から、グローバルの $a を参照したい場合は、
global キーワードを使用します。
$a = 1; // グローバル
function test() {
global $a;
echo $a; // グローバルの $a を参照する。
}
test();
この場合は、1 が表示されます。
とかく、global を忘れるので、注意しましょう。