【PHP入門】独自の関数を作る方法(ユーザー定義関数)

投稿日: 作成:   更新:

PHPの関数について解説します。

  • 関数とは何だろう?
  • 関数の書き方が知りたい。
  • どんな時に関数を作成するんだろう?

このような内容について解説します。

私はWEB開発中心に、フロントエンド、サーバーサイド、サーバー構築など経験豊富なエンジニアです。
これからプログラミングを始める方に向けて、少しでも分かりやすく解説していきたいと思います。

独自の関数を作成できるようになると、同じ処理を書かずにソースコードがスッキリと読みやすくなります。

今回、関数について基本的な作り方から、どんな時に関数を作るのか?について、
手順や考え方について解説します。

それでは行きましょう!

関数とは

処理を1箇所にまとめる箱のようなものです。

関数は「何を渡したら(引数)、何が返ってくる(戻り値)」のインプット・アウトプットを意識して作成します。

関数のイメージを表すとしたら、次のような感じでしょうか。

関数の呼び出しイメージ:

引数を関数に渡して、関数が戻り値を返します。
このようにインプット・アウトプットを意識しましょう。

インプット・アウトプットについて1つ例えると、

「両替機(関数)に千円(引数)を渡したら、
  両替機(関数)の中で何やっているか分からないけど、
   100円玉が10枚(戻り値)出てきた。」

みたいなイメージでしょうか。

関数の基本的な書き方

関数の書き方について説明します。

関数の書き方イメージ

関数の書き方についてのイメージと表を見てみてください。

関数イメージ:

名称意味
関数名(funcName部分)自分で好きな関数名称を指定する
引数呼び出し元から受け取った値に変数名を指定する
戻り値「return」で呼び出し元に返す

次に実際に関数を書いてみましょう。

ちなみに「引数、戻り値がないパターン」や「引数があって、戻り値がないパターン」とかもありますが、

今回は引数、戻り値の両方あるパターンと両方ないパターンを説明します。

引数、戻り値があるパターン

次では「指定した引数に10を加算する独自関数」addTenをあらかじめ関数宣言しておいて、呼び出し元でechoで表示するソースコードを書いてみました。

<?php

// 指定した引数に10を加算する独自関数
function addTen($value)
{
    return $value + 10;
}

// 呼び出し元
$answer = addTen(5);
echo $answer;

?>

実行結果:

呼び出し元で「addTen(関数)」を呼んで「5(引数)」を渡していたので、「15(戻り値)」が返ってきた値をechoで表示しています。

引数、戻り値の両方ないパターン

引数、戻り値の両方ないパターンは単純に、()部分の中になにも書かないで関数内にreturn文を書かなければこのパターンが作れます。

例として「echoHelloWorld()」を作ってみました。
関数が呼び出されると「Hello World!!」を表示してくれる独自関数です。

<?php

// 「Hello World!!」を出力する独自関数
function echoHelloWorld()
{
    echo 'Hello World!!';
}

// 呼び出し元
echoHelloWorld();

?>

実行結果:

echoHelloWorld()関数を呼び出しただけで表示することができました。

もし、echoは呼び出し元で実行したい場合は、関数内のechoをreturnに変えて呼び出し元でechoを記述しましょう。

書き方は自由ですので、色々と試してみてシックリくる書き方を模索してみてください。

どんな時に関数を作成するのか

同じ処理が2回以上あるときは、関数を作るキッカケになりますね。

次のソースコードは、バナナとイチゴの税込価格を表示する処理です。
このソースコードの中に同じ処理がありますので探してみてください。

<?php

// バナナの定価
$bananaPrice = 100;

// イチゴの定価
$strawberryPrice = 500;

// バナナの定価に消費税10%を加算して表示
echo 'バナナの税込価格:';
echo $bananaPrice + ($bananaPrice * 0.1);
echo '<br>';

// イチゴの定価に消費税10%を加算して表示
echo 'イチゴの税込価格:';
echo $strawberryPrice + ($strawberryPrice * 0.1);
echo '<br>';

?>

実行結果:

どうですか?見つかりましたか?

このソースコード内の同じ処理は「消費税10%を加算」です。

この「消費税10%を加算」を関数化して「calcTax」として呼び出すように変更してみます。

<?php

// 消費税10%を加算する独自関数
function calcTax($value)
{
    return $value + ($value * 0.1);
}

// 以下、呼び出し元の処理

$bananaPrice = 100;
$strawberryPrice = 500;

echo 'バナナの税込価格:';
echo calcTax($bananaPrice);
echo '<br>';

echo 'イチゴの税込価格:';
echo calcTax($strawberryPrice);
echo '<br>';

?>

結果は先ほどと同じです。

同じ処理を関数化することができました。

なぜ関数にするのか

先ほどの同じ処理をcalcTax関数に処理をまとめたように、関数にすることで呼び出し元の処理がスッキリとして可読性(見やすくなる)が良くなります

また、関数を他の呼び出し元で再利用することもできます。

ちなみに、実践の開発では関数は別ファイルにありますので、それを取り込んで(include)使用します。

注意点として、
初心者は最初から関数を作ろうとしないようにしましょう。

何の目的で作られた関数であるのか分かんなくなるので、同じ処理を発見してからまとめるようにすると良いでしょう。

ではどう関数を作ったら良いのかと言いますと、次の「関数を作る手順」で説明します。

関数を作る手順

関数を作るときは次の手順を踏むと良いでしょう。

関数を作る手順

  • ①素直に処理を書いてみる
  • ②処理の中から変数を抜き出してみる
  • ③関数化してみる

1つずつソースコードで説明します。

①素直に処理を書いてみる

まずは素直にそのまま処理を書いてみます。

次のソースコードでは、システム日付が’2021/01/01’のときに誕生日を知らせてくれる処理を書いてみました。

<?php

if (date('Y/m/d') == '2021/01/01') {
    echo '今日「' . date('Y/m/d') . '」は、あなたの誕生日です。';
} else {
    echo '今日「' . date('Y/m/d') . '」は、何でもない日です。';
}

?>

②処理の中から変数を抜き出してみる

①で書いた処理の中から変数にできそうな値を抜き出します。

抜き出すコツとしては、値に名前が付けられそうなものを探すことを意識すると抜き出しやすいです。

早速、変数を抜き出してみます。

<?php

// 抜き出した値を変数にする
$today = date('Y/m/d');
$yourBirthday = '2021/01/01';

if ($today == $yourBirthday) {
    echo '今日「' . $today . '」は、あなたの誕生日です。';
} else {
    echo '今日「' . $today . '」は、何でもない日です。';
}

?>

ソースコードの中に「date(‘Y/m/d’)、’2021/01/01’」があり、「date(‘Y/m/d’)」は$todayとして変数にして「’2021/01/01’」は$yourBirthdayとしました。

特に「’2021/01/01’」ついては何の値かがコメント記述でもされていない限り分からないため、このような値は真っ先に変数にした方が良いです。

③関数化してみる

②までできていれば、関数のインプット(引数)はイメージつくと思います。
あとはアウトプット(戻り値)です。

戻り値は「関数に何を任せるのか」を意識すると、関数化しやすいです。

また「呼び出し元が複雑にならないように関数化する」と意識するのも関数化がやりやすいと思います。

<?php

// 指定された日付が今日であれば、あなたの誕生日であるとメッセージを返す
function getBirthdayMessage($yourBirthday)
{
    $today = date('Y/m/d');

    if ($today == $yourBirthday) {
        return '今日「' . $today . '」は、あなたの誕生日です。';
    } else {
        return '今日「' . $today . '」は、何でもない日です。';
    }
}

// 呼び出し元
echo getBirthdayMessage('2021/01/01');

?>

今回は、インプットに日付を渡すことで「今日が誕生日かを判定してメッセージを返す」処理getBirthdayMessageを作ってみました。

これにより、呼び出し元が1行になりスッキリとしましたね。

関数名は任意ですので、呼び出し元が直感的に何をする処理なのか分かれば良いと思います。

関数名を「動詞 + ○○」で書くのが一般的ですね。
なので今回は「get + BirthdayMessage」としました。

また、ちゃんと書くとなると「今日かどうかを判定して、誕生日メッセージを返す」なので、「getBirthdayMessageByJudgementToday()」となりますが、関数名が長すぎるのも逆に分かりにくいので短くしてます。

関数名、変数名のつけ方はこの本に分かりやすく書いてますので、時間があれば読んでみるのも良いでしょう。

まとめ

PHPの関数について解説しました。

  • 関数とは(インプット・アウトプット)
  • 関数の書き方(関数名、引数、戻り値)
  • どんな時に関数を作成するのか(同じ処理が2回以上あるとき)
  • なぜ関数にするのか(可読性、再利用)
  • 関数を作る手順(変数を抜き出して関数化する)

色々と書きましたが、初めのうちは「頑張って関数にしなくても良い」と思います。

まずは、素直にそのままのソースコードで書いてみて、PHPの基本的な書き方をつかめてから関数化に挑んでも良いでしょう。


プログラミングスクールをお探しの方へ

プログラミング学習を挫折せずに続けて成功できる人は

「目的目標を明確にすること」
「質問・相談できる環境を作ること」
「自己解決スキルを身に着けること」

この3つを大切にしてると思います。

ただ漠然とプログラミング学習をしているだけでは
すぐに身に付きませんので、プログラミングスクールがおすすめです。

  • テックキャンプ
    本気でIT業界に転職したい方におすすめです。
    転職できなかったら全額返金があります。
  • DMM WEBCAMP
    国から認定されているスクールです。
    やむなく離職中の方など、条件を満たしている方は教育訓練給付金が支給されます。
  • TechAcademy
    1週間の無料体験があります。
    気軽にスクールを体験したい方向けです。