【PHP講座09】自分で関数を作ってみよう

PHP講座

前回から関数に入り、まずは関数自体事前に用意されている関数をいくつか紹介した。

以下がその記事だ。

【PHP講座08】用意された関数を使ってみよう | Shino’s Mind Archive

今回は、この関数自分で作る方法を解説しよう。

これができると、同じことを毎回書く必要が無くなる

ある程度大きなプログラムを書く際にはほぼ必須級の内容になるので、しっかり理解していこう。

スポンサーリンク

ユーザー定義関数

さて、自分で作る関数には、名前がついている。

それが、ユーザー定義関数だ。

今後、ただ単に関数と言ったら事前に用意されている関数を表し、自作する関数ユーザー定義関数と呼ぶことにしよう。

では、早速定義方法を。

function 関数名(引数1, 引数2, ...){
    // 処理の内容
}

このような書き方になる。

ユーザー定義関数の呼び出し方は関数と同じで、関数名(引数1, 引数2, ...);と書けばいい。

早速、例を見ていこう。

<?php
    $num1 = 10;
    $num2 = 20;
    add($num1, $num2);

    function add($num1, $num2){
        $sum = $num1 + $num2;
        echo $num1 . "と" . $num2 . "の合計は" . $sum . "です。";
        echo "<br>";
    }
?>

二つの値を受け取り、その合計を表示するユーザー定義関数addを作成した。

4行目がadd関数の呼び出し部分、6行目からがユーザー定義関数の定義部分だ。

このように、処理をまとめておき、別の場所から呼び出すことができる。

もちろん複数回呼び出すことも可能で、二回呼び出せば出力も二回行われる。

そのほか、戻り値を持たせることも可能だ。

その場合、ユーザー定義関数内に以下の文を入れる。

return 戻り値;

こちらのパターンも例を出しておこう。

与えられた数が偶数ならtrue、奇数ならfalseを返すユーザー定義関数を作ってみる。

<?php
    $num = 11;
    if(isEven($num)){
        echo $num . "は偶数です。";
        echo "<br>";
    }else{
        echo $num . "は奇数です。";
        echo "<br>";
    }

    function isEven($num){
        if($num % 2 == 0){
            return true;
        }
        return false;
    }
?>

今回、if文で返すものを変えてみた。

引数として受け取った$numを2で割った余りが0なら…つまり、偶数ならtrueを、そうでない(=奇数)ならfalseを返している。

そして、呼び出し部分を見ると、ifの真偽値のところで呼び出している。

こうすると、戻り値は呼び出し部分に置き換わるようなイメージになるので、偶数ならif文の条件もtrueになる。

なお、ここまで引数を受け取るパターンばかり書いているが、引数を受け取らないこともできる。

その場合でも、定義部分、呼び出し部分共に小括弧は必要なので注意しておこう。

このユーザー定義関数の中には、これまで紹介してきた変数の宣言条件分岐繰り返し処理関数の呼び出しなどどれも書くことができる。

何度も繰り返し書くような処理があった場合には、このユーザー定義関数としてまとめてしまおう。

ただし、この中で定義した変数については、そのユーザー定義関数内でしか使えない

その値を使いたいなら、戻り値として戻す必要があるので注意してほしい。

もう一つ注意として、ユーザー定義関数内でreturn文が実行されると、その瞬間ユーザー定義関数の処理が終わったとして、そこから先の内容は実行されなくなる

条件によってreturn文を実行させるような場合には気を付けよう。

逆に言えば、条件によって処理を終わらせたい場合には、return文を書けばいいとも捉えられる。

戻り値を戻したくない場合にはreturn;だけ書けばいいので、このあたりも覚えておこう。

ユーザー定義関数を別ファイルに書いてみよう

さて、ここまで定義方法などを書いてきた。

しかし、このままでは複数ファイルになったときに、それぞれに書かなければいけない

そうなるとメンテナンスも大変なので、ユーザー定義関数を別ファイルにして、それを読み込む形にしたい。

これももちろん可能で、require、あるいはrequire_once関数を使う。

これらを使うと、別ファイルに書いた内容を読み込むことができる。

これらの違いは、すでに対象のファイルが読み込まれているかどうかをチェックすること。

同じファイルの読み込みを複数書いた場合に、requireならそのたびに読み込みrequire_onceなら最初一回以外は無視される

関数の定義は一度読み込めば十分なので、基本的にはrequire_onceを使えばいいだろう。

ではなぜrequireがあるかというと、そもそもこれらはphpファイル以外も読み込める

例えば、HTMLで繰り返し使う部品を外部ファイルに書いておき、それを読み込むということもできるのだ。

そのため、同じ部品を繰り返し使う場合なんかにはrequireを使うようにしよう

では、この使い方だ。

同じディレクトリに、以下二つのファイルを作ってみよう。

<?php
    require_once("./lib.php");

    $num1 = 10;
    $num2 = 20;
    add($num1, $num2);
?>
<?php
    function add($num1, $num2){
        $sum = $num1 + $num2;
        echo $num1 . "と" . $num2 . "の合計は" . $sum . "です。";
    }
?>

sample21.phpの内容を、二つのファイルに分けてみた。

lib.phpに、使用するユーザー定義関数を書いている。

それを、index.php側で読み込む、ということをしている。

require_once関数を使っているのはindex.phpの2行目。

このように、引数として読み込むファイルのパスを書く

こうすることで、lib.phpで定義した内容を、別のindex.phpで実行することができる。

もちろん、同時に別のファイルから呼び出すこともできるので、ユーザー定義関数を一元管理できるというわけだ。

他の使い方として、必ず最初に行いたい処理があった場合に、これも別ファイルに定義しておき、読み込むといった使い方もある。

特に、後で解説するデータベースセッション周りの処理で使うことが多いだろう。

おわりに

今回は、ユーザー定義関数について解説した。

また、他のファイルに書かれた内容を読み込むrequirerequire_once関数についても軽く触れた。

今回以外の使い方は、また後程解説しよう。

さて、次回はクラスという話に進んでいく。

さらに話が広がっていくので、一個一個確実に進めていこう。

コメント

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