function を用いて関数を定義することができます。下記の例では、2つの引数を加算して返却する add() 関数を定義し、利用しています。
<?php $c = add(5, 3); echo $c; // 8が出力される function add($x, $y) { return $x + $y; }
関数名には、アンダーバー(_)、数字(0~9)、文字(a~z, A~Z, 日本語等)を使用できます。ただし、数字で始まる関数名は使用できません。
○ function GetName() { ... } ○ function get_name() { ... } ○ function 名前取得() { ... } // 日本語も使用可能 × function get-name() { ... } // 許可されない記号(-)を用いてる × function 2GetName() { ... } // 先頭が数字で始まっている
下記の様に、引数を省略した場合のデフォルトの引数を指定することができます。
<?php function func($str, $charset = "UTF-8") { // 関数の処理 } func("ABC", "Shift_JIS"); // $mode に Shift_JIS が指定される func("ABC"); // $mode にデフォルト引数 UTF-8 が指定される
return は値を返却します。return の後には値を記述します。値は (...) で括らないことを推奨します。
<?php function add($x, $y) { $z = $x + $y; return $z; // return ($z) とはしない }
値を記述しない場合もあります。
<?php function print_message($msg) { if (!isset($msg)) { return; } echo "== $msg\n"; }
関数の戻り値としてリストを返却することも可能です。
<?php function getDate() { return array(2012, 12, 31); } list($year, $mon, $mday) = getDate();
関数の内部で使用される変数は、関数内部だけで有効なローカル変数になります。下記の例では、関数 func() の中で使用されている $var は、変数名は同じですが、外部で宣言されている $var とはまったく別の変数として扱われます。関数内部のローカル変数 $var に 5を代入しても、関数外部のグローバル変数 $var の値は 10のままです。
<?php $var = 10; // グローバル変数 func(); function func() { $var = 5; // ローカル変数 } echo "var = $var\n"; // 10が出力される
global を用いて、関数内部からグローバル変数を参照することができます。下記の例では、func() なかで設定している $var はローカル変数ではなくグローバル変数となります。
<?php $var = 10; func(); function func() { global $var; $var = 5; } echo "var = $var\n"; // 5が出力される
アンパサンド(&)を用いて、値の参照渡しを行うことで、呼び出し元の変数の値を、関数の中で設定することが可能となります。下記の例では、setValue() 関数により、呼び出し元の変数 $name の値を関数の内部で変更しています。
<?php $name = "Tanaka"; setValue($name, "Suzuki"); echo $name; // Suzuki と出力される function setValue(&$value, $str) { $value = $str; }
func_num_args(), func_get_arg(), func_get_args() を用いることで、引数の数が不定の関数を作成することができます。
<?php func("AAA", "BBB", "CCC"); function func() { for ($i = 0; $i < func_num_args(); $i++) { echo "$i : " . func_get_arg($i) . "\n"; } foreach (func_get_args() as $arg) { echo "$arg\n"; } }
下記の様にして、関数名を変数で指定することができます。
<?php function foo() { echo "foo\n"; } function bar() { echo "bar\n"; } $func = "foo"; $func(); // 関数foo()が呼ばれる
array_map()の第一引数などではコールバック関数を指定しますが、下記の様にして無名の関数を指定することができます。
<?php # (1)関数名を指定するケース function func($n) { return $n * 2; } print_r(array_map("func", array(1, 2, 3))); # (2)無名関数を代入した変数を指定するケース $func = function($n) { return $n * 2; }; print_r(array_map($func, array(1, 2, 3))); # (3)無名関数を直接指定するケース print_r(array_map(function($n) { return $n * 2; }, array(1, 2, 3)));