【PHP8.x】getCodeメソッドの使い方

getCodeメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getCodeメソッドは、PHP 8で提供される内部クラスであるTypeErrorから、発生したエラーの種類を示すコードを取得するために実行するメソッドです。TypeErrorは、関数やメソッドに渡された引数の型が期待されるものと異なっていた場合など、プログラムの実行中に型の不一致が起きた際にスローされるエラーです。

このgetCodeメソッドを呼び出すと、エラーオブジェクトに設定されている整数値のエラーコードが返されます。このエラーコードは、特定の種類のTypeErrorを識別するための数値的な識別子として機能します。多くの場合、TypeErrorにおいては明示的なエラーコードが設定されていないため、デフォルト値として0が返されることが多いですが、PHPの内部処理によっては特定のコードが設定されている場合もあります。

システムエンジニアを目指す初心者の方にとって、エラーコードは、プログラムが予期せぬ動作をした際に、その原因を特定したり、エラーの種類に応じて異なる回復処理を行う際に非常に役立つ情報です。例えば、エラーログを記録する際に、getCodeメソッドで取得したエラーコードを含めることで、後からエラーの原因を分析しやすくなります。このメソッドは、Throwableインターフェースの一部として定義されており、PHPのほとんどの例外やエラーオブジェクトが共通して持っている基本的な機能の一つです。エラーハンドリングの仕組みを理解する上で重要な要素となります。

構文(syntax)

1<?php
2
3try {
4    function greet(string $name) {
5        echo "Hello, " . $name;
6    }
7    greet(123); // string型が期待されるがint型を渡すためTypeErrorが発生
8} catch (TypeError $e) {
9    echo $e->getCode(); // TypeErrorオブジェクトから例外コードを取得
10}

引数(parameters)

引数なし

引数はありません

戻り値(return)

int

このメソッドは、発生した TypeError に関連付けられたエラーコードを整数型で返します。

サンプルコード

PHP TypeError getCode() でエラーコードを取得する

1<?php
2
3/**
4 * 型ヒントを持つ関数で、意図的にTypeErrorを発生させる例。
5 *
6 * システムエンジニアを目指す初心者の方へ:
7 * この関数は、引数として文字列(string)のみを受け取るように定義されています。
8 * もし異なる型の値(例:数値)を渡すと、PHPはTypeErrorをスローします。
9 */
10function processText(string $textInput): void
11{
12    echo "処理中のテキスト: " . $textInput . PHP_EOL;
13}
14
15/**
16 * try-catchブロックを使ってTypeErrorを捕捉し、getCodeメソッドでエラーコードを取得します。
17 */
18try {
19    // ここで意図的にTypeErrorを発生させます。
20    // processText関数はstring型を期待していますが、整数(int)を渡しています。
21    echo "不正な型の引数を渡してTypeErrorを発生させます..." . PHP_EOL;
22    processText(123); // string型を期待するが、int型を渡している
23} catch (TypeError $e) {
24    // TypeErrorが捕捉された場合、このブロックが実行されます。
25    echo "-----------------------------------" . PHP_EOL;
26    echo "TypeErrorを捕捉しました!" . PHP_EOL;
27
28    // getCode()メソッドを使って、エラーコードを取得します。
29    // TypeErrorの場合、通常は0を返します。
30    echo "エラーコード (getCode()): " . $e->getCode() . PHP_EOL;
31
32    // その他のエラー情報も表示しておくと、何が起きたか理解しやすくなります。
33    echo "エラーメッセージ (getMessage()): " . $e->getMessage() . PHP_EOL;
34    echo "エラー発生ファイル (getFile()): " . $e->getFile() . PHP_EOL;
35    echo "エラー発生行 (getLine()): " . $e->getLine() . PHP_EOL;
36    echo "-----------------------------------" . PHP_EOL;
37}
38
39echo "エラー処理後もスクリプトは続行します。" . PHP_EOL;
40
41?>

このPHPサンプルコードは、関数の引数に誤った型の値を渡した際に発生する「TypeError」と、そのエラーを適切に処理する方法を、システムエンジニアを目指す初心者の方にも理解しやすいように示しています。

processText関数は、引数として文字列(string)のみを受け取るように型が指定されています。もしこの関数に数値(int)のような異なる型の値を渡すと、PHPは自動的にTypeErrorを発生させます。

プログラムがTypeErrorで途中で停止するのを防ぐため、try-catchブロックを使用します。tryブロック内でprocessText(123)のように意図的に型エラーを発生させると、エラーが発生した時点でcatch (TypeError $e)ブロックに処理が移り、エラーを捕捉します。

捕捉したTypeErrorオブジェクト(変数$e)からは、エラーに関する様々な情報を取得できます。その中でも$e->getCode()メソッドは、このエラーに割り当てられたコードを整数(int)として返します。TypeErrorの場合、このメソッドは引数を取らず、通常は0が戻り値として返されることが一般的です。

エラーコードと合わせて、getMessage()でエラー内容、getFile()でエラー発生ファイル、getLine()でエラー発生行を取得し表示することで、何が起きたかを詳しく把握できます。このようにエラーを適切に処理することで、たとえエラーが発生してもプログラム全体の実行を継続させることが可能になります。

このサンプルコードは、PHP 8で強化された型チェック機能により発生するTypeErrorの処理を示しています。初心者が注意すべき点は、型ヒントを持つ関数に意図しない型の値を渡すとTypeErrorが発生し、スクリプトが停止する可能性があることです。これを防ぐにはtry-catchブロックでエラーを捕捉し、安全に処理を続ける必要があります。

TypeError::getCode()メソッドは、TypeErrorの場合、通常0を返します。この値は特定のエラー種別を識別するコードではなく、主にエラーメッセージ(getMessage())が詳細な情報を提供します。エラー発生ファイル(getFile())や行番号(getLine())と合わせて利用することで、問題の特定とデバッグに役立ちます。エラー処理では、getCode()だけでなく、他の情報も活用して原因を把握することが重要です。

PHP TypeError getCode() でエラーコードを取得する

1<?php
2
3/**
4 * 意図的にTypeErrorを発生させ、そのエラーコードを取得する関数。
5 *
6 * @param int $a 整数
7 * @param int $b 整数
8 * @return int 2つの数の合計
9 */
10function addNumbers(int $a, int $b): int
11{
12    return $a + $b;
13}
14
15try {
16    // addNumbers関数はint型の引数を期待しているが、
17    // ここでは意図的に文字列型の引数を渡し、TypeErrorを発生させる
18    addNumbers('not_an_int', 5);
19} catch (TypeError $e) {
20    // TypeErrorを捕捉し、エラーメッセージとエラーコードを出力
21    echo "TypeErrorが発生しました。\n";
22    echo "メッセージ: " . $e->getMessage() . "\n";
23    // getCode()メソッドを使用してTypeErrorのエラーコードを取得
24    echo "エラーコード: " . $e->getCode() . "\n";
25}
26
27?>

PHP 8のTypeError::getCode()メソッドは、プログラム実行中に発生したTypeErrorのエラーコードを取得するために使用されます。このメソッドは引数を取らず、発生したエラーの種類を示す整数値(int)を戻り値として返します。

サンプルコードでは、まずaddNumbersという関数が定義されています。この関数は、引数として二つの整数(int型)を受け取り、その合計も整数として返すよう型ヒントで指定されています。

tryブロック内では、意図的にaddNumbers関数に対して、期待される整数型ではなく文字列型の引数を渡しています。これにより、PHPは引数の型が異なることを検知し、「TypeError」と呼ばれる型エラーを発生させます。

catchブロックでは、この発生したTypeErrorを捕捉しています。捕捉されたTypeErrorオブジェクト($e)からは、getMessage()メソッドでエラーの詳細なメッセージを取得できるほか、getCode()メソッドを呼び出すことで、そのTypeErrorに割り当てられた特定のエラーコードを整数値として取得し、表示することができます。このように、getCode()メソッドはエラーの識別や、それに応じた処理をプログラム的に行う際に役立ちます。

このサンプルコードは、PHPの型宣言に反する値を関数に渡した場合に発生するTypeErrorの捕捉方法と、その情報取得の例を示しています。特に注意すべき点は、TypeErrorgetCode()メソッドが返す値です。PHPの標準的なTypeErrorの場合、多くは0を返します。これは、特定の数値エラーコードが割り当てられていないためであり、一般的な「エラーコード」のイメージと異なる場合があるためご留意ください。

安全に利用するためには、関数で型宣言を用いることで開発中に型の不一致を早期に発見できますが、本番環境では外部からの入力など予期せぬ型が渡される可能性があります。このような場合に備え、try-catch文を使ってエラーを適切に捕捉し、プログラムの停止を防ぎつつ、エラーメッセージや詳細をログに出力するなど、堅牢なエラーハンドリングを実装することが重要です。

関連コンテンツ

【PHP8.x】getCodeメソッドの使い方 | いっしー@Webエンジニア