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

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

作成日: 更新日:

基本的な使い方

__toStringメソッドは、UnhandledMatchErrorオブジェクトが文字列として扱われようとした際に、そのオブジェクトの文字列表現を返すために実行されるメソッドです。PHP 8で導入されたmatch式は、与えられた値を複数のcaseと比較し、最初に見つかった一致するcaseの式を実行する構文です。しかし、このmatch式において、与えられた値がどのcaseにも一致せず、かつdefault句が定義されていない場合、PHPはUnhandledMatchErrorというエラーを発生させます。

このUnhandledMatchErrorクラスに実装されている__toStringメソッドは、そのエラーオブジェクトが文字列として扱われる必要がある場面、例えばechoprintで出力されたり、ログファイルに記録されたりする際に自動的に呼び出されます。具体的には、このメソッドは、どのmatch式でエラーが発生したのか、そしてどの値がどのcaseにも一致しなかったのかといった、エラーに関する重要な情報を人間が読みやすい形式の文字列として提供します。

これにより、システム開発者は発生したUnhandledMatchErrorの詳細を即座に把握し、プログラムのデバッグ作業を効率的に進めることが可能となります。__toStringメソッドは、オブジェクトの内部状態を外部に表現するための標準的な手段であり、このエラーオブジェクトの具体的な問題点を明確に伝える上で不可欠な役割を担っています。

構文(syntax)

1<?php
2$value = 0;
3
4try {
5    match ($value) {
6        1 => 'One',
7        2 => 'Two',
8    };
9} catch (UnhandledMatchError $e) {
10    echo $e;
11}
12?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

string

このメソッドは、例外が発生した際に、その例外に関する情報を文字列として返します。

サンプルコード

UnhandledMatchErrorを文字列で取得する

1<?php
2
3/**
4 * UnhandledMatchError の __toString メソッドの例.
5 *
6 * match 式で網羅されていない場合にスローされる UnhandledMatchError をキャッチし、
7 * そのエラーメッセージを文字列として取得します。
8 */
9
10try {
11    $value = 3;
12
13    $result = match ($value) {
14        1 => 'one',
15        2 => 'two',
16        default => throw new UnhandledMatchError(),
17    };
18
19    echo $result . PHP_EOL;
20} catch (UnhandledMatchError $e) {
21    // __toString メソッドを使用して、エラーメッセージを文字列として取得
22    echo "UnhandledMatchError occurred: " . $e . PHP_EOL;
23}

このサンプルコードは、PHP 8 で導入された UnhandledMatchError クラスの __toString メソッドの使い方を示しています。UnhandledMatchError は、match 式において、すべての可能な値が網羅されていない場合にスローされる例外です。

コードでは、まず try-catch ブロックを使用して、UnhandledMatchError が発生する可能性のあるコードを囲んでいます。match 式では、$value が 1 または 2 の場合にそれぞれ 'one' または 'two' を返しますが、それ以外の場合は UnhandledMatchError をスローします。

catch ブロックでは、UnhandledMatchError オブジェクト $e をキャッチしています。$e に対して echo を実行すると、自動的に __toString メソッドが呼び出されます。__toString メソッドは、UnhandledMatchError オブジェクトを文字列として表現したものを返します。具体的には、エラーメッセージを含む文字列が返されます。

この例では、__toString メソッドを使用して、エラーメッセージを簡単に取得し、画面に出力しています。__toString メソッドは引数を取りませんが、エラーの内容を表す文字列を返します。これにより、例外の内容をログに記録したり、ユーザーに表示したりする際に便利です。システムエンジニアを目指す上で、例外処理とエラーメッセージの適切な表示は重要なスキルとなります。

UnhandledMatchErrorは、match式がすべての可能性を網羅していない場合に発生する例外です。サンプルコードでは、__toStringメソッドを使って、例外オブジェクトを文字列として扱っています。__toStringは、例外の内容を分かりやすく表示する際に便利です。match式を使用する際は、default句を設けるか、すべての可能性を網羅することで、このエラーを回避できます。例外処理(try-catch)を適切に行い、エラー発生時の処理を記述することが重要です。UnhandledMatchErrorが発生した場合、プログラムが予期せぬ動作をする可能性があるため、注意が必要です。

UnhandledMatchError::__toString でエラーを文字列化する

1<?php
2
3/**
4 * UnhandledMatchError クラスの __toString メソッドのサンプルコード
5 *
6 * UnhandledMatchError は、match 式で網羅されていない場合にスローされるエラーです。
7 * __toString メソッドは、このエラーオブジェクトを文字列として表現するために使用されます。
8 */
9
10try {
11    $value = 3;
12
13    $result = match ($value) {
14        1 => 'one',
15        2 => 'two',
16        // 3 のケースがないため、UnhandledMatchError がスローされる
17    };
18
19    echo $result;
20
21} catch (UnhandledMatchError $e) {
22    // エラーオブジェクトを文字列として出力する
23    echo $e->__toString();
24}
25
26?>

UnhandledMatchErrorクラスの__toStringメソッドは、PHP 8で導入されたmatch式において、いずれの条件にも合致しない場合に発生するUnhandledMatchErrorオブジェクトを文字列として表現するために使用されます。このメソッドは引数を取らず、文字列型の値を返します。

サンプルコードでは、$valueが3の場合にmatch式で対応するケースが存在しないため、UnhandledMatchErrorがスローされます。try-catchブロックでこのエラーを捕捉し、$e->__toString()を呼び出すことで、エラーオブジェクトの内容を文字列として取得し、画面に出力しています。

__toStringメソッドは、例外の内容を開発者やログに出力する際に役立ちます。例外オブジェクトを直接文字列として扱えるため、デバッグ作業を効率的に進めることが可能です。match式を使用する際は、予期しない値が渡された場合に備え、UnhandledMatchErrorが発生する可能性を考慮し、適切なエラーハンドリングを行うことが重要です。

UnhandledMatchErrorは、match式で全ての可能性を網羅していない場合に発生します。サンプルコードでは、$valueが3の場合に該当するケースがないため、エラーが発生します。__toString()メソッドは、このエラーオブジェクトを文字列として表現するために使用され、エラーメッセージを簡単に表示できます。try-catchブロックでエラーを適切に処理することで、プログラムが異常終了するのを防ぎます。match式を使う際は、網羅性を意識し、予期しない値が渡された場合のエラーハンドリングを実装することが重要です。__toString()メソッドは、デバッグやログ出力にも役立ちます。

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