PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのTypeErrorとは?発生原因と例外処理の方法を実例で解説

はじめに

TypeErrorクラスは、PHPにおけるErrorクラスを継承したエラークラスです。主に以下のようなケースでスローされます。

  • 関数に渡された実引数の型と、仮引数で宣言された型が一致しない場合
  • 戻り値の型宣言と、実際に返された値の型が一致しない場合
  • 組み込み関数に不正な引数(数や型)が渡された場合

厳密な型チェックを有効にするには、スクリプトの先頭でdeclare(strict_types=1)を指定する必要があります。

例1:引数の型不一致によるTypeError

次の例では、仮引数はint型として宣言されていますが、呼び出し側で文字列を渡しているため、TypeErrorが発生します。try-catchブロックで捕捉し、エラーメッセージを出力しています。

<?php
function add(int $first, int $second) {
    echo "addition: " . ($first + $second);
}
try {
    add('first', 'second');
}
catch (TypeError $e) {
    echo $e->getMessage(), "\n";
}
?>

出力結果

Argument 1 passed to add() must be of the type integer, string given, called in C:\xampp\php\test.php on line 9

例2:戻り値の型不一致によるTypeError

次の例では、ユーザー定義関数がint型の戻り値を返すよう宣言されているにもかかわらず、実際には配列を返しています。このためTypeErrorがスローされます。

<?php
function myfunction(int $first, int $second): int {
    return array($first, $second);
}
try {
    $val = myfunction(10, 20);
    echo "returned data : " . $val;
}
catch (TypeError $e) {
    echo $e->getMessage(), "\n";
}
?>

出力結果

Return value of myfunction() must be of the type integer, array returned

例3:組み込み関数への不正な引数

PHPの組み込み関数に誤った数の引数を渡した場合にもTypeErrorがスローされます。ただしこの場合も、スクリプト冒頭でstrict_types=1を宣言しておく必要があります。

次の例では、2つの引数を受け取るpow()関数に対して3つの引数を渡しているため、エラーが発生します。

<?php
declare(strict_types=1);
try {
    echo pow(100, 2, 3);
}
catch (TypeError $e) {
    echo $e->getMessage(), "\n";
}
?>

出力結果

pow() expects exactly 2 parameters, 3 given

まとめ

TypeErrorは、PHPの型システムに関わる問題を検知するための重要なエラーです。strict_types宣言と組み合わせて使うことで、意図しない型変換によるバグを早期に発見できます。実際の開発では、try-catch構文でTypeErrorを適切に捕捉し、エラーメッセージをログに出力することで、デバッグの効率を大幅に向上させることができます。

  1. 【初心者向け】PHPタグとは?基本構文からショートタグまで徹底解説

    PHPタグとは?定義と基本的な使い方PHPスクリプトは、拡張子が「.php」のテキストファイルとして作成され、Webサーバー上に保存されます。サーバー上のPHPパーサーは、<?php(開始タグ)と?>(終了タグ)という特殊な文字列を探し出します。この2つのタグは「PHPタグ」と呼ばれ、その間に記述されたステートメントのみがパーサーによって解釈・実行されます。PHPタグで囲まれたコードは、HTMLドキュメントの中に自由に埋め込むことができます。埋め込まれたPHPコードはサーバー側で実行され、その処理結果だけが出力されるため、残りのHTML部分はクライアントのブラウザーにあるHTMLパ

  2. PHPのpi()関数とは?使い方と定義済み定数との対応を実例付きで解説

    pi()関数の定義と使い方PHPのpi()関数は、数学定数π(円周率)の値を返す関数です。戻り値はfloat型の「3.14159265359」であり、PHPにあらかじめ定義されている定数M_PIとまったく同じ値になります。構文pi ( void ) : floatパラメータこの関数は引数を受け取りません。引数なしでそのまま呼び出すことができます。戻り値pi()関数は数学定数πの値を返し、定義済みの数学定数M_PIと等価です。数式の中では、M_PIの代わりにpi()関数を使うこともできます。対応するPHPバージョンこの関数はPHP 4.x、PHP 5.x、PHP 7.xのすべてのバージョンで利用