【作って納得!PHP入門】関数(function)を使ってみよう

PHP

前回はwhile文について記載しました。

今回は関数について見ていきます。

最初に関数についての説明をします。
その後に、実際に簡単なプログラムを作成して、関数について学んでいきます。

この記事の目標(作るもの)について

関数を使用した簡単なプログラムを作成し、下記のように画面に結果を出力して確認します。

PHPの関数とは?

PHPの関数はプログラムを効率的に処理するため、同じような処理をひとつにまとめて定義できる機能になります。
関数にはPHPで定義されている標準関数もありますが、自分で定義して自作関数を作ることもできます。

関数に何かの値を渡して(もしくは渡さずに)呼び出すと処理をしてもらうことができます。
関数は内部的な処理内容は気にせずに使用することができます。

関数の基本的な書き方

実際に関数を定義するときの構文としては、このようになります。

function [関数名] ([引数]) {
    // ...処理する内容...
    return [返り値];
}

[関数名]の箇所に関数名を記載します。
関数名の付け方の決まりについては、公式ドキュメントを参考にすると下記のようになっています。

関数名として有効な形式は、まず文字かアンダースコアで始まり、その後に任意の数の文字・ 数字・あるいはアンダースコアが続くものです。

[引数]には、渡す引数を記載します。複数ある場合はカンマで繋いで書くようにします。
引数がなくても処理が可能な関数の場合には、[引数]を省いて作成することができます。

[返り値]は関数の呼び出し元に返す値です。
何らかの処理を関数内で行った後に、呼び出し元に値を返すことができます。
返す値がない場合は、return文と[返り値]は省略できます。

実際に例を出してみます。
このコードは“Hello[n]”を出力する関数です。

function showHello($count) {
    for ($i = 0; $i < $count; $i++) {
         echo "Hello{$i}";
    }
}

引数に渡した$countの回数、for文で繰り返し処理をします。
繰り返し処理では“Hello{$i}”を出力しています。

この関数を使用する場合は下記のように呼び出します。

showHello(3); // 結果は「Hello0Hello1Hello2」となる
showHello(5); // 結果は「Hello0Hello1Hello2Hello3Hello4」となる

関数に繰り返す回数を渡すと、回数分“Hello[n]”が出力されます。
上記では2回呼び出していますが、このように関数は再利用でき、呼び出す側は”引数”と”返り値”を意識しておけば使うことができます。

関数を定義する順番について

関数を定義する順番に決まりはありません。
<?phpからPHPプログラムが始まりますが、これのどこかに書いておけば大丈夫です。

コードの読みやすさを優先して、同じような処理の関数はまとめて定義したり、関数は名前順に定義するなど
ファイルで統一された書き方がされていればいいかと思います。

関数のデフォルト値について

関数に渡す値を指定しない場合はデフォルト値を設定することができます。
例えば先ほどのshowHello関数の場合、下記のように関数の引数箇所に値を入れておけばデフォルト値になります。

function showHello($count = 5)

こうやって定義された関数ですが、
引数が渡された場合は、渡された引数が使われますが、渡されていない場合はデフォルト値になります。

つまり上記は”showHello(1)”と呼ぶと、”Hello”は1回のみしか出力されませんが
“showHello()”と引数なしで呼ぶと、デフォルトの5が$countに入って、5回”Hello”が出力されることになります。

関数のことが、なんとなくわかりましたでしょうか。
実際にコードを書いて、確認していきましょう。

PHPで関数(functions)を使ってみよう

実際に関数を使用して、処理を書いてみましょう。
前回作成したcodelike_web_dockerの配下に、calc_function.phpという名前で下記の内容で保存します。

<?php

function addition($x, $y, $outputText = false) {
    if ($outputText) {
        textOutput($x, $y, '+');
    } else {
        return $x + $y;
    }
}

function subtraction($x, $y, $outputText = false) {
    if ($outputText) {
        textOutput($x, $y, '-');
    } else {
        return $x - $y;
    }
}

function textOutput($x, $y, $type) {
    switch ($type) {
      case '+':
          $total = $x + $y;
          echo "{$x}足す{$y}は{$total}です。";
          break;
      case '-':
          $total = $x - $y;
          echo "{$x}引く{$y}は{$total}です。";
          break;
    }
}

echo "function test1<br />";

echo addition(13, 20)."<br />";
echo subtraction(50, 22)."<br />";

echo "<br />function test2<br />";

echo addition(13, 20, true)."<br />";
echo addition(1, 1, true)."<br />";
echo addition(3, 4, true)."<br />";
echo subtraction(50, 22, true)."<br />";

解説

今回は足し算と引き算を行ってくれるプログラムを書いてみました。
関数は3つ作成しています。

addition関数

addition関数は足し算をする関数です。

引数として、$x$yそして$outputText渡しています。

function addition($x, $y, $outputText = false)

$outputTextはテキスト出力するかの判定値です。
定義を見ると$outputText = falseとなっていますね。
これはデフォルト値でした。渡されない場合は、falseになります。

$x$yは足す値です。

$outputTextがtrueの場合は
$x」と「$y」そして「+」をtextOutput関数に渡します。そして内容をテキスト化して出力します。
このように関数から関数を呼ぶこともできます。

$outputTextがfalseの場は
return $x + $y;となっていますね。単純に呼び出し元に、足した結果が返されます。

subtraction関数

subtraction関数は引き算をする関数です。
内容としては、ほとんど足し算の関数と同じです。

引数も同じように$x$yそして$outputText渡しています。

function subtraction($x, $y, $outputText = false)

$outputTextがtrueの場合は
$x」と「$y」そして「-」をtextOutput関数に渡します。そして内容をテキスト化して出力します。
-」が足し算の時と違いますね。この第3引数に渡しているものは、足し算か引き算かを判断する変数です。

$outputTextがfalseの場は
return $x - $y;となっています。呼び出し元に、引き算の結果が返されます。

textOutput関数

textOutput関数は、それぞれの関数に渡した引数と結果をテキストにします。

この関数は、足し算と引き算のそれぞれの関数から呼ばれています。
関数の定義部分は下記のようになっています。

function textOutput($x, $y, $type)

$x$yは関数で計算するための値を渡していました。
$typeは「+」または「-」が渡されて、その内容でswitch文で分岐しています。

+」だった場合は “{$x}足す{$y}は{$total}です。”と出力していて、
-」だった場合は “{$x}引く{$y}は{$total}です。”と出力していますね。

$x$yには計算の値が入って、$totalは計算結果です。

例えば、addition関数からtextOutput(10, 20 ,"+")で呼ばれた場合ですが
出力結果は「10足す20は30です。」となります。

関数を使用している箇所

最後に関数を使用している箇所の説明です。

最初は2つの関数を使って、このように書いています。

echo addition(13, 20)."<br />";
echo subtraction(50, 22)."<br />";

足し算をしていて、”13″($x)と”20″($y)を渡しています。
第3引数は渡していないので、$outputTextはfalseになります。
結果として、「33」という数値のみが出力されます。

次は引き算をしていて、”50″($x)と”22″($y)を渡しています。
第3引数は渡していないので、$outputTextはfalseになります。
結果として、「28」という数値のみが出力されます。

次は、$outputTextを全て”true”にして出力しています。
“true”になっているので、全てテキスト化されます。

echo addition(13, 20, true)."<br />";
echo addition(1, 1, true)."<br />";
echo addition(3, 4, true)."<br />";
echo subtraction(50, 22, true)."<br />";

最初の3行は足し算をしていますね。
このように関数にすると複数回、再利用することができます。

それぞれの結果は下記になります。
・13($x)と20($y)を渡して、結果は「13足す20は33です。」となります。
・1($x)と1($y)を渡して、結果は「1足す1は2です。」となります。
・3($x)と4($y)を渡して、結果は「3足す4は7です。」となります。

最後は引き算で
・50($x)と22($y)を渡して、結果は「350引く22は28です。」となります。

動作確認

想定通りの結果が出力されているか確認してみましょう。前回作成した環境を立ち上げます。
calc_function.phpの編集が終わったら、保存して下記にアクセスします。

http://localhost:8080/calc_function.php

想定した結果が返ってきました!

おわりに

関数を使用したプログラムを見ていきました。
関数を使用すると、少し難しくなるイメージですが、いかがでしたか。

関数化することで、何度も呼べるように部品化できます。
内部を知らなくても、渡す値と返ってくる形式が分かっていれば使うことができました。

今回のように関数化すると、便利に使っていくことができるので
同じような処理をする場合は関数化して効率的にプログラムを作成していきましょう。

その他のPHP入門のオススメ記事

そのほかに、このブログで書いているオススメ記事をご紹介します。

PHP入門の記事一覧に戻る

他のPHP入門記事もありますので、合わせてご確認ください。

参考

公式ドキュメント – function
PHP: ユーザー定義関数 - Manual

コメント

タイトルとURLをコピーしました