uiuifree.com

- サイト制作のノウハウと最適化を目指して-

2020.11.15【PHP】関数と引数を定義して処理を呼び出す方法

【PHP】関数と引数を定義して処理を呼び出す方法

    プログラミングの基礎である関数は機能をまとめ再利用できるようになる便利な仕組みです。ただ学んでみると理解できるまで時間がかかり曖昧なまま飛ばしてしまうプログラマもいます。今回はPHPの関数を自作できるよう紹介していきます。

    関数とは

    関数とはプログラムで記述した一連の流れをひとまとまりに定義したものです。
    例えば「メールを送信する」「クレジット決済する」など機能を作った時に、同じ機能を複数のページで使いまわしたりすることがあります。関数はそういった機能を切り出し、同じ処理を何度も呼び出せるようにしたり、基本ロジックを整理し可読性をあげるといった役割を持ちます。

    基本的な関数

    同じ機能をまとめて実装するのが関数と言っても実際どんな感じで使うのでしょうか?

    例えばECサイトで

    • A商品をカートにいれる
    • B商品をカートにいれる
    • 商品を購入する
    • 支払いをする

    と流れを実装する時に、商品毎にカートに入れる処理を実装したり、永遠と長い処理で購入から支払いの処理をカタカタコーディングすることはありません。

    • addCart(商品A)
    • addCart(商品B)
    • commitCart()
    • pay(支払金額)

    といったように、1つ1つの処理の単位で関数を作って実装します。(正確に言えばクラス設計してメソッド定義しますが、長くなるので関数で覚えていてください)

    原則は一連の処理に名前を定義できるくらい、1機能1関数を作る位が丁度良いとされます。

    関数のメリット・デメリット

    関数のメリットは次のようなものがあります。

    • 関数を使うことでコードが整理され読みやすくなります(可読性の向上)
    • 繰り返し処理をまとめることでコードの重複が減ります(保守性の向上)
    • 不具合を特定しやすくなる

    関数を使うデメリットはありません、どんなプロジェクトにおいても関数を使うべきです。
    使わないのであれば、よっぽど小さなコード(数十行)程度のものなど検証で試す程度でしょう。

    関数の定義(function)

    関数を定義するにはfuntionを使います。functionの後にプログラマが定義した関数名を指定します。

    function 関数名(引数){
     // 処理
        return 戻り値;
    }

    では実際に単純な関数を作ってみましょう。
    文字を出力するだけの簡単な処理をhello関数として定義してみます。

    echo "こんにちは";
    function hello()
    {
        echo "こんにちは";
    }

    実行するためにはhello関数を呼び出してあげれば定義した機能処理してくれます。

    function hello()
    {
        echo "こんにちは";
    }
    
    hello(); 
    hello();
    hello();
    // 3回呼び出すと「こんにちは」という出力が3回実行されます。

    関数は一度定義すると、どこでも何回でも定義した処理を使い回すことができます。

    関数の引数

    引数とは関数に渡すことのできる値のことです。関数は実行すると同じ処理を繰り返しますが、引数で値を渡すことで値に応じた処理を実行できるようになります。

    先ほどのhello関数に名前を渡すことのできるように改良してみましょう。

    <?php
    
    function hello($name)
    {
        echo "こんにちは{$name}さん";
    }
    
    hello('佐藤');
    // 出力結果:こんにちは佐藤さん

    このように引数に佐藤という文字列を指定してあげると、hello関数の引数の$nameに佐藤という文字列が入り処理されます。

    関数の戻り値(return)

    関数の基本である戻り値は関数の処理結果を変数に格納できるようにするものです。 先程まではhello関数を実行したらテキストが出力されていましたが、戻り値にテキストが入るように変更します。

    <?php
    
    function hello($name)
    {
        return "こんにちは{$name}さん";
    }
    
    $text =  hello('佐藤');
    echo $text;

    これで関数を実行すると$textに実行結果であるこんにちは佐藤さんという文字列が入っていることが確認できました。

    関数を定義する時には処理の塊をイメージし、変動する部分を引数に設定し、再利用したい値を戻り値に設定するよう考えると綺麗に設計できるかもしれません。

    関数の応用

    関数の引数を増やす

    関数の引数は何個でも増やすことができます。

    引数が2つの例
    function add($a, $b)
    {
        return $a + $b;
    }
    引数を動的にする例
    function add(...$args)
    {
        $num = 0;
        foreach ($args as $arg) {
            $num += $arg;
        }
        return $num;
    }
    
    echo add(1, 3, 4); // 出力結果:8
    

    関数の引数にデフォルト値を定義

    function hello($name = '田中')
    {
        echo $name;
    }
    
    hello(); // 出力結果:田中
    hello('佐藤'); // 出力結果:佐藤

    引数と戻り値に型を定義

    引数と戻り値には型を定義することができます。 型を定義することで指定する型以外のものが設定されたときにエラー出力させることができます。これにより意図しない挙動やバグを事前に防ぐことができるようになります。

    function profile(string $name, int $age): string
    {
        return "{$name}は{$age}歳です。";
    }

    処理の途中で戻り値を返す

    関数の戻り値は複数箇所で設定することができます、returnが呼び出されると関数の処理は終了され呼び出し元に戻ります。

    function validate($name)
    {
        if(!$name){
            return '指名が入力されていません';
        }
        // 登録処理など
        return '';
    }
    

    まとめ

    関数を使うことで複雑な処理を単純化させ開発効率を高めることができます。同じ処理は極力まとめチームメンバーが読みやすいコードを心がけることで開発効率が上がり業務としての開発もできるようになってきます。是非関数について覚えていきましょう。

    目次
    PROFILE

    このサイトを運営してるuiuifreeです。
    渋谷のベンチャー企業で2年ほど新規事業を担当した後にフリーランスエンジニアにキャリア転換。
    求人サイトの開発が多くエンジニア/看護師/保育士などの分野でサイトを運営しています。

    アウトプット中の技術

    リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)