関数定義
コード
function 関数名(引数){
return 戻り値;
}
戻り値の有無はreturn文の有無で決定される
例
function AddNum($a, $b){
return $a + $b;
}
初期値ありの関数定義
引数には初期値が設定できる。
初期値ありの引数は、初期値なしの引数より後ろに定義されなければならない
コード
function AddNum($a, $b = 10, $c = 0){
return $a + $b + $c;
}
可変個引数
例1
function AddNum($a, ...$numbers){
$ret = $a;
foreach($numbers as $value){
$ret += $value;
}
return $ret;
}
echo AddNum(10, 11, 12, 13, 14); //11〜14は$numbersの配列に代入される
例2
function AddNum(){
$numbers = func_get_args(); //引数を配列で受け取る
$count = func_num_args(); //引数の数
$ret = 0;
for($i = 0; $i < $count; $i++){
$ret += $numbers[$i];
}
return $ret;
}
echo AddNum(10, 11, 12, 13, 14);
型指定ありの関数定義
引数に型指定
function AddNum(int $a, int $b){
return $a + $b;
}
戻り値に型指定
function AddNum($a, $b):int { //最後に :型 を付け加える
return $a + $b;
}
指定できるデータ型
array 配列
callable コールバック関数
bool ブール値
float 浮動小数
int 整数
string 文字列
クラス名
インターフェース名
self インスタンス自身
引数の参照渡し
コード
function AddNum(&$a, $b){ // & をつけることで参照渡しになる
$a += $b;
}
$num = 10;
AddNum($num, 20); //呼び出し側に & を付ける必要はない
echo $num; //出力 = 30
可変変数
$を重ねることで変数に格納されている値を名前にした変数を動的に生成できる。
コード
$username = "Nick";
$$username = "Michael"; //$Nick = "Michael"; と同じ
echo $Nick; //出力 = Michael
可変関数
コード
function AddNum($a, $b){
return $a + $b;
}
$func_name = "AddNum"; //関数名
if(function_exists($func_name)){ //関数が存在するか調べてから実行
echo $func_name(10, 20);
}
無名関数(ラムダ式)
主にコールバックで使用する。
変数に代入もできる。
コード
$my_func = function($a, $b){
return $a + $b;
}; //代入文なのでセミコロンが必要
echo $my_func(10, 20); //出力 = 30
変数を親のスコープから引き継ぐ場合
コード
$parent_value = 100;
$my_func = function($a, $b) use ($parent_value) {
return $a + $b + $parent_value;
};
$parent_value = 200;
echo $my_func(10, 20); //出力 = 130
use で引き継がれた値は、関数が定義された時点のものであり、関数が呼び出された時点のものではない。