はじめに
プログラミングをしているとよく使う処理など関数を作ったりします。関数を作るまとめです。
return文が実行された時点で関数は終わります、またreturnがない関数はnullが返されます。
関数の定義
function nameEcho($name) //$nameを仮引数と呼ぶ
{
return "こんにちは{$name}さん" . PHP_EOL;
}
function 関数名(){
処理
}と記述します。関数名は任意で引数はなしなら無記述です多分。
実際に使ってみる
function nameEcho($name) //$nameを仮引数と呼ぶ
{
return "こんにちは{$name}さん" . PHP_EOL;
}
echo nameEcho('keia'); //keiaを実引数と呼ぶ
こんにちはkeiaさん
実引数が記述されなかったら
実引数が記述されていない場合だとエラーが出ます。ですが、関数を定義する時に実引数が記述されていなかった場合のデフォルト値の設定が可能です。
function nameEcho($name = '名無し')
{
return "こんにちは{$name}さん" . PHP_EOL;
}
echo nameEcho();
こんにちは、名無しさん
可変長引数
引数の前に...をつけることで複数の引数を受け取ることができ、受け取ったものは配列として渡されます。
function add(...$scores)
{
$total = 0;
foreach ($scores as $score) {
total+= $score;
}
return $total;
}
print_r(add(10, 20, 30, 40));
100
リファレンス渡し
関数に渡す引数の前に&をつけることで関数に変数そのものを渡し、関数内で変数の値の書き換えが可能になります。
function add(&$num)
{
$num++;
}
$num = 7;
add($num);
echo $num;
8
変数の値そのものが書き換えられましたね。
名前付き引数
引数を渡すとき、引数名:値と書くことで書いた引数に値を渡すことができます。
function register($name = null, $age = null)
{
$users = ['name' => $name, 'age' => $age];
}
register($age :10); //ageのみ10を追加
$ageにのみ値を渡すことができました。
スコープ
関数内で定義されていない変数を関数内の処理で扱うにはglobal 変数名;と記述しないといけません。
また関数内で定義した変数を関数外で使用することはできません。
$rate = 1.1;
function calc($price){
global $rate; //このように記述することで関数内で関数外で定義した変数が使用可能になる
retuen $price * $rate;
}
可変関数
変数 = '関数名'とすることで変数を関数にすることができます
function sum($a, $b)
{
return $a + $b;
}
function sub($a, $b)
{
return $a - $b;
}
$calc = 'sum'; //$calcはsum関数として扱える
echo $calc(10, 20);
foreach ()
30
変数を関数にできるなんて便利ですね。
無名関数(クロージャ)
ちょっと理解が曖昧ですがこうゆう方法もあるということで残しておきます。
$sum = function($a, $b) //functionの後に関数名を記述しない
{
return $a + $b;
}
上記は無名関数です。functionの後に関数名がないです。また、無名関数は関数の引数としても使えるそうです。
$sum = function($a, $b) //functionの後に関数名を記述しない
{
return $a + $b;
}
function calc($price){
return price * 1.1;
}
echo calc($sum(100,200)); //(100+200)*1,1
330
関数の引数の型指定
関数で使う引数の型を指定することが可能です。
()外に型を記述することで戻り値の型の指定も可能です。型なしならvoid
function scoreboard(string $name , int $score): void{
echo '競技名:'. $name . ' スコア:' . $score;
}
ですが、PHPは都合よく型変換を行なってくれる場合があります。
function scoreboard(string $name , int $score): void{
echo '競技名:'. $name . ' スコア:' . $score;
}
scoreboard('keia','500');
競技名:keia スコア:500
都合よく型変換されたくない場合はdeclare(strict_types=1);を最初に追加します。
declare(strict_types=1);
function scoreboard(string $name , int $score): void{
echo '競技名:'. $name . ' スコア:' . $score;
}
scoreboard('keia','500'); //'500'が引数ではないのでエラーが出る
また戻り値についてですが戻り値の型指定の前に「?」を付けることでnullを許容することが可能になります。
function changer(int $point): ?int{
return $point >= 500 ? 1000 : null;
}
$changedPoint = changer(400);
var_dump($changedPoint);
NULL
まとめ
とても勉強になりました。