PHPの関数とは何かを解説。また、関数の種類や定義・呼び出しの方法を一緒に解説する。
関数を作る際にセットとなる引数や返り値(戻り値 / return)についても説明する。
関数とは何か
関数とは、いくつかの処理をまとめて名前をつけたものを指す。
<?php
function calculation(){
$num1 = 10;
$num2 = 20;
$cul = $num1+$num2;
echo $cul;
}
calculation();
?>
出力結果:
30
上記の例で見ると
- 変数num1を定義
- 変数num2を定義
- num1とnum2を足したものを変数culに代入
- 変数culを出力
この4ステップがcalculation関数のなかにまとまっている。
関数とは何が便利なのか?
関数を作ると、複数の処理をひとまとめにして使い回すことができる。
プログラミングでは、同じような処理が複数箇所で使われることがある。
この時に、同じ処理を何回も書くよりはその処理をまとめてしまうことで、楽に書けるのがメリットになる。
ちなみに関数で書く「function」とは日本語では「機能」を意味する。
なのでfunctionの中ではある機能を作っていると考えるとわかりやすいかもしれない。
使い回しの一例
例えばお店のセールで10%OFFの計算をする。
関数を作らないで処理を書くと下記のようになる。
<?php
$price1 = 1800;
$price2 = 2500;
$sale1 = $price1 * 0.9;
echo $price1."円の10%offは".$sale1."円です";
$sale2 = $price2 * 0.9;
echo $price2."円の10%offは".$sale2."円です";
?>
出力結果:
1800円の10%offは1620円です
2500円の10%offは2250円です
ではこの10%OFFの処理を20%OFFの処理に変更したい場合、どうなるか?
計算部分の0.9を0.8に、2箇所変更しなくてはいけない。
もし上の値段が$price100まであったとしたら、100箇所直さないといけない。
それだと大変なので、今度は関数を作ってみる。

ここでは引数は「計算したい元の価格」、戻り値は「10%offの計算結果」と考えてもらうと良い。
この関数に外から$price1や$price2を入れる形にする。

コードで書くと、下記のような形になる。
<?php
$price1 = 1800;
$price2 = 2500;
function calc_sale($price)
{
$sale = $price * 0.9;
return $price."円の10%offは".$sale."円です";
}
echo calc_sale($price1);
echo calc_sale($price2);
?>
1800円の10%offは1620円です
2500円の10%offは2250円です
関数を作って書き直して見た。
こうすると、もし今回20%に書き直さなくてはいけなかったとして、たとえ計算したい数値が$price1から$price100まであったとしても、関数の中の0.9を0.8にしてしまえば全ての計算結果が変わる。
なので、関数によって、同じ処理を使いまわせるし、コードを修正するのも楽になる。
関数の種類
関数の種類には二種類ある。
- 組み込み関数:あらかじめPHPで用意されている関数
- ユーザー定義関数:自分で定義する関数
ユーザー定義関数
ユーザー定義関数とは、自分で定義する関数だ。
関数の定義と呼び出し
関数を定義する時には、下記のように定義する。
function 関数名(引数)
{
処理
return 返り値;
}
実際に関数を呼び出すときは、下記のように呼び出す。
関数名(引数);
この引数部分で計算させたい数値や情報を入れることで、自分の作成した関数でその数値を使って計算することができる。
引数とは?
引数とは外から内部に入れたい情報のこと。
先程の10%OFFの例で言うと、元の値段を入れる場所が引数になる。

引数のない関数を作るとどうなる?
引数がないということは外から情報を入れることができない。
戻り値とは?
戻り値とは計算結果のこと。
関数を実際に使った時に、戻り値で設定した部分が結果として返ってくる。
先ほど作ったこちらの関数に、

$price1の変数を入れて実際に使うと、returnで設定した部分が結果で返ってくる。

returnをセットしないとどうなる?
計算結果が返ってこない。
よってechoで出力しようと思っても計算結果が来ないので出力されない。
組み込み関数
ユーザー定義関数と違い、組み込み関数とはPHPが最初から準備している関数である。
なので自分で定義しなくても、使うことができる。
最初から用意されてる関数も膨大な数があり、こちらの関数リファレンスで検索することができる。