引数

目次
  • 解説
  • 1. 引数のあるメソッド
  • 2. デフォルトの値を持つ引数
  • 3. 戻り値と引数のまとめ
  • 実践問題
進捗を変更する




解説

1. 引数のあるメソッド


引数(ひきすう)とは、メソッド内の処理で使用する値をメソッドの外から与える方法です。次のサンプルコードは、practiceCalculationの中で使用する3つの数値を呼び出し側から渡して計算させています。

    static function practiceArguments() {
        $result = self::practiceCalculation(100, 20, 3); // 3つの数値を渡す
        Logger::echo($result);
    }

    static function practiceCalculation(int $a, int $b, int $c) {
        return $a + $b + $c; // 受け取った3つの数値が入った変数を計算に使用
    }
[2020/12/31 12:34:56] 123 // 100 + 20 + 3 の結果

メソッドの宣言側では、丸括弧内に引数受け取るための変数仮引数)を宣言します。この例ではint型の3つの a, b, c という変数を宣言していますが、型は指定しなくても構いません。なお、型を指定した場合は呼び出す側では必ず対応する値を渡す必要があります。

メソッドの呼出側では、丸括弧内に引数実際の値実引数)を入れます。実引数を変えて呼び出せば、同じメソッドでも引数の内容に応じた異なる結果を生み出すことが可能となります。

次のサンプルコードでは、呼び出す際に渡す引数を変更して2回呼び出しています。

    static function practiceArguments() {
        $result = self::practiceCalculation(100, 20, 3);
        Logger::echo($result);
        $result = self::practiceCalculation(1, 2, 3); // 異なる引数を渡す
        Logger::echo($result);
    }
[2020/12/31 12:34:56] 123 // 100 + 20 + 3 の結果
[2020/12/31 12:34:56] 6   // 1 + 2 + 3 の結果

2. デフォルトの値を持つ引数


他にも、引数はデフォルトの値を持つことができます。メソッドの宣言側にデフォルトの値を指定することで、メソッドの呼出側で引数が指定されなかった場合にそのデフォルトの値を代わりに代入します。

    static function practiceArguments() {
        $result = self::practiceCalculation(100, 20, 3);
        Logger::echo($result);
        $result = self::practiceCalculation(1, 2, 3);
        Logger::echo($result);
        $result = self::practiceCalculation(10, 20); // 実引数は2つ
        Logger::echo($result);
    }

    static function practiceCalculation(int $a, int $b, int $c = 5) {
        return $a + $b + $c;
    }
[2020/12/31 12:34:56] 123 // 100 + 20 + 3 の結果
[2020/12/31 12:34:56] 6   // 1 + 2 + 3 の結果
[2020/12/31 12:34:56] 35 // 10 + 20 + 5 の結果

3. 戻り値と引数のまとめ


ここで改めて、メソッド構造を確認しておきましょう。

なお、引数と戻り値は両方ある必要は無く、どちらか一方しかないメソッドも成立します。

実践問題


(1)VSCodeを起動し、ヘッダーメニューの「ファイル」>「フォルダーを開く...」から、「php_basic」プロジェクトを開いてください。
(2)php_basic」プロジェクトの「Structure.php」を開いてください。
※無い場合は「メソッドと戻り値」を先に学習しましょう。
(3)Structure」クラス内に次のサンプルコードのメソッドをコピー&ペーストし、
mainから呼び出せるようにして、「http://localhost/php_basic/structure/Structure.php」へのアクセスで表示されることを確認してください。
(4)コメント行に記された各問題文に対し、答えとなるプログラムコードを
問題文の次の空白行以降に書き込みまたは書き換えて
、ブラウザから確認してください。
    static function questionMethod() {
        // (問1)引数なしで、ターミナルに「こんにちは」を
        // 出力するメソッドmethodQ1をクラス内に作成し、
        // 次の空白行で呼び出してください。

        // (問2)引数なしで、戻り値として「こんばんは」を
        // 戻すメソッドmethodQ2をクラス内に作成し、
        // 戻り値をresultQ2で受け取るよう変更してください。
        $resultQ2 = '';
        Logger::echo($resultQ2);

        // (問3)下記の引数を受け取り、下記の処理を行う
        // メソッドmethodQ3をこのクラス内に作成し、
        // 戻り値をresultQ3で受け取るよう変更してください。
        // 【引数1】50
        // 【引数2】200
        // 【処理】引数どうしを掛け算した結果を戻り値として戻す
        $resultQ3 = 0;
        Logger::echo($resultQ3);
    }
実行結果例を表示
[2020/12/31 12:34:56] こんにちは
[2020/12/31 12:34:56] こんばんは
[2020/12/31 12:34:56] 10000

正解


(問1)正解を表示
    static function questionMethod() {
        ~~ 省略 ~~
        self::methodQ1();
        ~~ 省略 ~~
    }

    static function methodQ1() {
        Logger::echo('こんにちは');
    }

(問2)正解を表示
    static function questionMethod() {
        ~~ 省略 ~~
        $resultQ2 = self::methodQ2();
        Logger::echo($resultQ2);
        ~~ 省略 ~~
    }

    static function methodQ2() {
        return 'こんばんは';
    }

(問3)正解を表示
    static function questionMethod() {
        ~~ 省略 ~~
        $resultQ3 = self::methodQ3(50, 200);
        Logger::echo($resultQ3);
        ~~ 省略 ~~
    }

    static function methodQ3(int $a, int $b) {
        return $a * $b;
    }

正解プログラムコード全文を表示
    static function questionMethod() {
        // (問1)引数なしで、ターミナルに「こんにちは」を
        // 出力するメソッドmethodQ1をクラス内に作成し、
        // 次の空白行で呼び出してください。

        self::methodQ1();

        // (問2)引数なしで、戻り値として「こんばんは」を
        // 戻すメソッドmethodQ2をクラス内に作成し、
        // 戻り値をresultQ2で受け取るよう変更してください。
        $resultQ2 = self::methodQ2();
        Logger::echo($resultQ2);

        // (問3)下記の引数を受け取り、下記の処理を行う
        // メソッドmethodQ3をこのクラス内に作成し、
        // 戻り値をresultQ3で受け取るよう変更してください。
        // 【引数1】50
        // 【引数2】200
        // 【処理】引数どうしを掛け算した結果を戻り値として戻す
        $resultQ3 = self::methodQ3(50, 200);
        Logger::echo($resultQ3);
    }