【PHP】レッスン3-05:関数の型付けを理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:関数の型付け

この記事の練習問題を解くために必要な知識:
ビルトイン関数関数の定義と呼出し関数の戻り値デフォルト引数とキーワード引数関数の型付け無名関数とアロー関数スコープ

<<前のページ PHP記事一覧 次のページ>>

PHPの「関数の型付け」とは

この章ではPHPにおける「関数の型付け」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。




PHPでは関数を定義する際に、引数や戻り値に型を指定することができます。

これを「関数の型付け」と呼びます。

型付けを利用することでコードの品質が向上し、バグを減らす効果が期待できます。

本記事では関数の型付けについて基本的な考え方や使い方を解説します。

型付けの目的と利点

関数の型付けは、引数や戻り値に対して「このデータ型であるべき」というルールを強制する仕組みです。

これにより以下の利点があります:

  • コードの読みやすさ向上: 関数の意図が明確になります。
  • バグの予防: 不適切なデータ型が渡された場合、エラーを早期に検出できます。
  • 一貫性の確保: プロジェクト全体で統一的なデータ型管理が可能です。

型付けの基本構文と例

PHPでは関数の引数と戻り値に対して型を指定できます。

以下は基本構文と例です:

引数と戻り値に型を指定

  • int $a, int $b は引数の型を指定しています。
  • : int は戻り値の型を指定しています。
  • 異なる型が渡された場合はエラーが発生します。

ユニオン型の利用

PHP 8.0以降では、ユニオン型を使用して複数の型を許容することができます。

ユニオン型の例

  • int|string は、引数が int または string のいずれかであることを意味します。
  • 異なる型が渡されるとエラーになります。

Nullable型の指定

型付けにおいて「値が null でも許容される」場合は? を使用して Nullable 型を指定します。

Nullable型の例

  • ?string は引数が string または null を受け取ることを意味します。
  • null が渡された場合でもエラーになりません。

まとめ

関数の型付けはコードを安全かつ明確にするための重要な機能です。

PHPでは引数や戻り値の型を指定することでコードの品質向上が期待できます。

次回は「無名関数とアロー関数」について学びましょう。型付けを活用して堅牢なプログラムを作成してください。

関数の型付けの練習問題:エラーを防ぐ安全な関数を学ぼう

入力された数値を2倍にする関数を作成しましょう。

この関数では引数と戻り値の両方に型を指定し、PHPの型付けの仕組みを体験します。

関数を使う際、適切な型でない場合はエラーが発生するようにしてください。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. doubleValue という関数を作成すること。
    • 引数には 整数型(int) のみを受け取る。
    • 戻り値は 整数型(int) である。
    • 引数の値を2倍にして返す。
  2. ユーザーに数値を入力してもらうこと。
    • fgets を使用して標準入力からデータを受け取る。
    • 入力値の前後の余白を trim で取り除くこと。
  3. 入力された値が数値であるか確認すること。
    • 数値でない場合は「エラー: 数値を入力してください」と表示して終了する。
  4. 数値が正しく入力された場合は、doubleValue 関数を呼び出し、結果を画面に表示すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:関数doubleValueを定義(引数に整数型を指定し、戻り値も整数型)
  □ 引数を2倍にした結果を返す
2:「数値を入力してください: 」と改行を出力
3:標準入力から値を取得し、trimで前後の空白を削除した結果を変数$inputに代入
4:if文$inputが数値かどうかを判定
  □ $inputを整数型にキャストし、変数$numberに代入
  □ doubleValue関数を呼び出し、その結果を変数$resultに代入
  □ 「入力した数値の2倍は: 」と変数$resultの内容を出力
5:else文
  □ 「エラー: 数値を入力してください。」と出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

以上がこの問題の穴埋めコードです。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

正解コードの解説

このコードでは「関数の型付け」を学ぶことを目的としています。

入力された数値を2倍にする関数を作成し、その引数と戻り値の型を明確に指定しています。

コードをブロックごとに分解して説明します。

関数の定義と型付け

  • 関数の定義: function doubleValue によって、doubleValue という名前の関数を定義しています。
  • 引数の型付け: (int $number) は、この関数が 整数型 (int) の引数のみ受け取れることを指定しています。
  • 戻り値の型付け: : int は、この関数が 整数型 (int) の値を返すことを指定しています。
  • 型付けの利点: 型付けを行うことで、誤った型のデータが渡された場合にエラーを出して安全性を高めることができます。

メイン処理部分

  • echo: 文字列を出力します。ここでは「数値を入力してください」と画面に表示します。
  • fgets: 標準入力 (キーボードからの入力) を取得するビルトイン関数です。
  • trim: 入力値の前後の余分な空白や改行を取り除くために使います。
  • PHP_EOL: 改行を表します。環境に依存せず、適切な改行コードを使用します。

型チェックと条件分岐

  • is_numeric: 入力値が数値であるかを確認する関数です。数値でない場合はエラーメッセージを表示します。
  • キャスト: (int) は入力値を整数型に変換します。
  • 関数の呼び出し: $result = doubleValue($number); で、定義した関数を呼び出し、引数に渡した値を2倍にして戻り値を取得します。
  • 条件分岐: if-else 文を使用して入力が数値である場合とそれ以外の場合で処理を分けています。

まとめ

このコードでは「関数の型付け」の重要性を学びました。

型付けを行うことで不適切なデータが渡された際にエラーを早期に検出でき、コードの安全性が向上します。

ぜひ自分で新しい関数を作り、型付けの効果を実感してください!

<<前のページ PHP記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    PHPのテキスト&問題集トップへ戻る
    トップページへ戻る