《PHP8上級試験対策》関数・メソッドの型指定と strict_types の挙動まとめ

  • URLをコピーしました!

はじめに

PHP8 の関数やメソッドでは、引数や戻り値に型を指定できます。さらに declare(strict_types=1); を記述するかどうかで、型の扱いが大きく変わります。本記事では、通常モードと strict モードの違いをサンプルコードと実行結果を比較しながら整理します。さらに nullable 型を使った null 許容の方法も紹介します。

キーワード: strict_types / 型指定 / TypeError / 弱い型変換 / nullable型

目次

型指定と strict_types の基本

  • 関数やメソッドの引数・戻り値に型を指定可能
  • declare(strict_types=1); の有無で動作が変わる
  • 通常モード:スカラー値は弱い型変換が行われる
  • strictモード:型は完全一致でなければならない

サンプルコード

class Hoge {
    public function test(int $i, string $s, int $n) {
        var_dump($i, $s, $n);
    }
}

$obj = new Hoge();
$obj->test('123', 999, null);

実行結果の比較表

モード第1引数 '123' → int $i第2引数 999 → string $s第3引数 null → int $n実行結果
通常モード(strict_typesなし)自動変換されて int(123)自動変換されて string(3) "999"変換不可 → TypeErrorFatal error: Argument #3 must be of type int, null given
strictモード(declare(strict_types=1)変換されずエラー(string を int に渡せない)(ここに到達しない)(ここに到達しない)Fatal error: Argument #1 must be of type int, string given

nullable 型で null を受け入れる

null を渡す可能性がある場合は、nullable 型 を使います。? を型の前に付けるだけです。

class Hoge {
    public function test(int $i, string $s, ?int $n) {
        var_dump($i, $s, $n);
    }
}

$obj = new Hoge();
$obj->test(123, '999', null);

実行結果(strict モードでもOK)

int(123)
string(3) "999"
NULL
  • nullable 型を使えば strict モードでも null を安全に渡せる
  • PHP8 上級試験でも押さえておきたいポイント

試験対策ポイント

  • 通常モード → 弱い型変換あり、null は型に合わなければエラー
  • strictモード → 弱い型変換なし、完全一致が必要
  • null を許容する場合は ?型 を使う
  • 「null は例外的に受け入れられる」という説明は誤り

まとめ

  • 通常モード → 弱い型変換が働く
  • strictモード → 型が完全一致していないと即 TypeError
  • null を扱う場合は nullable 型 ?型 を使うことが安全
  • 試験対策としても、nullable 型の理解は必須

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次