【PHP】これで分かる関数! – 関数とは? –

PHP

更新履歴

更新日更新者更新内容
2021/7/3JJI記事が長いため、各関数の内容は別の記事に分割
2021/8/17JJI・サンプルプログラムの実行結果に画面の画像を追加

関数とは?

関数とは、何らかの処理をおこなうコードをまとめて名前を付けたもののことです。
関数に引数を渡して処理を実行したり、関数から処理結果を受け取ったりすることもできます。
関数はクラスの中にも書けます。

関数は次のような場合に使用することが多いです。

  • 共通で呼び出す処理をまとめる
  • データベース処理、HTML表示処理などの異なる処理を分ける

関数を適切に使用すれば、コードの行数は少なくなります。
行数は少なければあとから読んだ場合にどんな処理であったのかわかりやすかったり、修正する場合の影響も少なくなります。

関数の例

関数の例として文字列のURLチェックを行う次の処理について考えます。

  • 文字列の先頭がhttp://で始まる
  • 文字列がhttp://xxxx~のように8文字以上であること

URLの文字列チェックを関数で書くと次のようなコードになります。
次の関数は文字列の長さ、文字列の先頭文字をチェックし、true、またはfalseを返します。

function check_url(string $str) : bool {
    // 文字列が8文字未満の場合
    if(strlen($str) < 8) {
         return false;
     }

     // http://で始まる文字ではない場合
    if(strpos($str, "http://") !== 0) {
         return false;
     }
     
     return true;
}

関数を使わない場合、上記のコードをチェックが必要な箇所にすべて書く必要があります。

コードを書いた後、修正することがなければ関数にしなくてもよいのです。
ただし、実際にはコードを書いた後、実際に動かしたら間違っていた、次の赤字のように修正が発生したすることもよくあります。

  • 文字列の先頭がhttp://で始まる、またはhttps://で始まる
  • 文字列がhttp://xxxx~のように8文字以上であること

関数を使用していない場合、同じ修正を何か所にも入れて修正した箇所をすべて動かさないといけないため、非常に時間と手間がかかります。

関数で書いていれば次のように修正するだけです。
strpos()関数に&&の条件を追加するだけで済みます。

function check_url(string $str) : bool {
    // 文字列が8文字未満の場合
    if(strlen($str) < 8) {
         return false;
     }

     // http://、https://で始まる文字ではない場合
    if(strpos($str, "http://") !== 0 && strpos($str, "https://") !== 0) {
         return false;
     }
     
     return true;
}

このように関数を使用するとコードの行数を減らしたり、後で修正するときも修正量を少なくすることができます。

関数を理解するのは少し難しいのですが、自分で実際に関数を作って動かしてみることで段々と理解することができるので、この記事の内容も参考に関数のコードを作ってみてください。

サンプルプログラム

参考までに上記で作ったURLの文字列チェック関数を実際に動かしたサンプルプログラム・実行結果を載せておきます。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);

    echo "【PHP】関数<br>\n";
    echo "関数<br>\n";
    
    echo '"":' . get_bool_str(check_url("")) . "<br>\n";
    echo '"aaa.com":' . get_bool_str(check_url("aaa.com")) . "<br>\n";
    echo '"http":' . get_bool_str(check_url("http")) . "<br>\n";
    echo '"http://":' . get_bool_str(check_url("http://")) . "<br>\n";
    echo '"http://aaa":' . get_bool_str(check_url("http://aaa")) . "<br>\n";
    echo '"https://aaa":' . get_bool_str(check_url("https://aaa")) . "<br>\n";
    
    /**
     * URL文字列チェック
     * http://で始まる文字列の場合、URLと判定する
     *
     * @param string $str チェック対象文字列
     * @return boolean trueの場合、URL文字列、falseの場合、URL文字列ではない
     */
   function check_url(string $str) : bool {
       // 文字列が8文字未満の場合
       if(strlen($str) < 8) {
            return false;
        }

        // http://、https://で始まる文字ではない場合
       if(strpos($str, "http://") !== 0 && strpos($str, "https://") !== 0) {
            return false;
        }
        
        return true;
   }

   function get_bool_str($var) :string {
        if(! $var) {
            return "false";
        }
        return "true";
   }
?>

実行結果は次の通りです。

・画面

・HTML

【PHP】関数<br>
関数<br>
"":false<br>
"aaa.com":false<br>
"http":false<br>
"http://":false<br>
"http://aaa":true<br>
"https://aaa":true<br>

構文

関数の構文は説明が長くなるので、次の記事にまとめています。

コールバック関数

関数の中でも理解が難しいコールバック関数について説明します。
説明が長くなるので、次の記事にまとめています。

可変関数

可変関数は次の記事で紹介します。

無名関数

無名関数は次の記事で紹介します。

アロー関数

アロー関数は次の記事で紹介します。

最後に

この記事では関数の基本から無名関数、アロー関数までを紹介しました。
プログラミングの初心者には、関数を理解することは難しいのですが、自分でサンプルプログラムを作っていくうちに覚えられると思います。

記事には中級者以上の内容を載せていますので、次のように段階を分けて覚えることをおすすめします。

  • 初心者の方は関数の基本的な使い方を覚える
    この記事では構文のところまでできるようにする
  • 関数を自由に作れる中級者以上の方は、コールバック関数以降を覚える

コメント