【PHP】これで分かる関数! – 関数の構文 –

PHP

更新履歴

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

はじめに

この記事では、関数の基本的な構文について説明します。
関数を早く覚えるには関数の構文を理解し、サンプルプログラムを作ってみることです。

基本

関数の構文は次の通りです。
型宣言の強制でも書いているようにこのブログでは型宣言を強制する形式の構文で説明します。

$var = function 関数名(引数1, 引数2, ...) :戻り値 {
    コード
    ...
    return 戻り値;
}

項目説明
$var関数の戻り値がある場合、設定する変数
戻り値がない場合、設定は不要
関数名関数名の先頭は文字かアンダースコアで始まり、
その後に任意の数の文字・ 数字・あるいはアンダースコアが
続く形式で指定する
引数関数内に渡す引数、複数の引数が指定可能、引数はない場合もある
引数は、int $paramのように型 変数の形式で指定する
戻り値
(function)
関数の戻り値を指定する
戻り値がない場合、voidと指定する
戻り値
(return)
return文の戻り値
return文で指定した値が関数の戻り値となる。
戻り値が不要な関数の場合、return文をつけない、
あるいはreturn ;のように書く

サンプルプログラム

サンプルプログラム1

戻り値がある場合のサンプルプログラムです。

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

    echo "【PHP】関数<br>\n";
    echo "関数の例<br>\n";

    echo "戻り値ありの関数<br>\n";
    $num = 3;
    if(check_num($num) == true) {
        echo $num . "は範囲内の数値です<br>\n";
    }

    $num = 6;
    if(check_num($num) == false) {
        echo $num . "は範囲外の数値です<br>\n";
    }

    // 戻り値ありの関数
    function check_num(int $num) :bool {
        // 1から5以外の数値の場合、falseを返す
        if( 1 > $num || $num > 5 ) {
            return false;
        }
        return true;
    }
?>

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

・画面

・HTML

【PHP】関数<br>
関数の例<br>
戻り値ありの関数<br>
3は範囲内の数値です<br>
6は範囲外の数値です<br>

サンプルプログラム2

戻り値がない場合のサンプルプログラムです。

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

    echo "【PHP】関数<br>\n";
    echo "関数の例<br>\n";

    echo "戻り値なしの関数<br>\n";

    output_str("あああ");
    output_str("テスト");

    // 戻り値なしの関数
    function output_str($str) :void {
        echo "文字列:" . $str . ":<br>\n";
    }
?>

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

・画面

・HTML

【PHP】関数<br>
関数の例<br>
戻り値なしの関数<br>
文字列:あああ:<br>
文字列:テスト:<br>

変数のスコープ

関数で定義した変数は基本的に関数内部のみ有効です。
変数のスコープは次の記事に詳しく書いています。

引数

関数の引数は次の記事で詳しく紹介します。

戻り値

関数から戻り値を返す場合、関数内でreturn文を使用します。
戻り値が不要な場合、記載しない、またはreturn文の後に戻り値を書かないかのいずれかになります。

戻り値のサンプルプログラムです。

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

    echo "【PHP】関数<br>\n";
    echo "【引数】戻り値<br>\n";

    // 戻り値あり
    echo "戻り値あり1:" . add_return(1) . ":<br>\n";
    echo "戻り値あり2:" . add_return(20) . ":<br>\n";
    
    // 戻り値なし
    output_no_return("a");
    output_no_return("テスト");

    // 戻り値あり
    function add_return(int $num) :int {
        if($num === 1) {
            return 1 + $num;
        }

        return 5 + $num;
    }

    // 戻り値なし
    function output_no_return(string $str) :void {
        if($str === "a") {
            return ;
        }

        echo '$str:' . $str . ":<br>\n";
    }
?>

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

・画面

・HTML

【PHP】関数<br>
【引数】戻り値<br>
戻り値あり1:2:<br>
戻り値あり2:25:<br>
$str:テスト:<br>

型宣言の強制

PHPは変数の型宣言が不要であり、型を自動的に判別して変換してくれます。
関数の引数、戻り値も型宣言がなくても使用可能ですが、想定外の型が関数に渡された場合、自動的に判別されることで予期しない動作になる可能性があります。

そのため、PHP7.0以上で関数の型宣言を強制する構文が追加され、誤った引数・戻り値になる場合はエラーが発生するようになりました。

この構文のおかげで関数をより安全に使用したり、間違った引数・戻り値の場合にエラーが発生したりするようになり、より安全で正しく動作するプログラムを作れます。

型宣言を強制する場合、次のようにプログラムの先頭で宣言文を書きます。

declare(strict_types=1);

実際に型宣言を使用したサンプルプログラムは次の記事を見てください。

型宣言を強制した方が安全に動くプログラムが作れるため、このブログでは型宣言の強制は常に使用します。

最後に

この記事では、関数の基本的な構文について説明しました。
記事の内容は多いのですが、サンプルプログラムを少しずつ作っていけば早く覚えることができます。

コメント