PHP – 関数 – 引数の型指定

概要

  • 新しいバージョンのPHPでは関数の引数の型を指定できる
  • ただし型チェックの前にキャストが試みられて、その結果が指定された型に合致しない場合はTypeErrorが出る
  • なので以下のような場合は(少なくとも型チェックでは)エラーにならない
    • 文字列型の引数に数値を与える場合
    • 数値型のタイプが異なる場合
    • 数値型の引数に与える文字列が数値として解釈可能な場合
  • これらの挙動にdeclare(strict_types=1)は影響しない

通常は型チェックされない

以下のコードをコンソールで実行する。動作確認のため引数範囲のチェックは行っていない。

挙動は以下の通り。

  • 文字列型を想定した引数に数値型の値をセットすると、文字列型にキャストされる
  • 整数型を想定した引数に実数型の値をセットすると、整数型にキャストされる
  • 数値型を想定した引数に文字列型をセットすると、
    • 数値に変換できる場合はその数値にキャストされる
    • 数値に変換できない場合は0として扱われる

引数の型を明示できるが一部キャストされる

以下のように引数の型を明示する。

挙動は以下の通り。

  • string型の引数にint型をセットすると、string型にキャストされる
  • int型の引数にfloat型の値をセットすると、int型にキャストされる
  • int型の引数にstring型の値をセットすると、
    • 数値表現の文字列ならキャストされる
    • 数値表現の文字列でないならTypeErrorになる

なお、ファイルの冒頭にdeclare(strict_types=1)を加えても結果は変わらない。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です