PHPのdeclare(strict_types=1)で厳密な型チェックを行う

PHP

declare(strict_types=1)とはなにか?

結論から言うと、型チェックの設定です。

記載することで、型宣言に正確に対応する値のみを受け入れ、それ以外の場合はエラーを返すようになります。

なぜ型チェックの設定が必要なのか?

PHPではデフォルトで暗黙の型変換が行われるためです。

デフォルトでは、PHP は誤った型の値を 可能であれば期待されたスカラー型の宣言に従うよう自動的に変換します(coercive モード)。 たとえば、関数に int が与えられたが、 パラメータで文字列が期待されていた場合、文字列型の値を取得します。

https://www.php.net/manual/ja/language.types.declarations.php#language.types.declarations.strict

以下コードは、二つの引数を足し算するメソッドですが、$value1は文字列型となっています。

declare(strict_types=1);の記載をすることで型不正エラーとなります。

(記載がなければ暗黙の型変換が行われ、計算結果が表示されます。)

<?php
declare(strict_types=1);

$value1 = '0';
$value2 = 1;

echo addition($value1,$value2);

function addition(float $value1, float $value2): float
{
    return $value1 + $value2;
}

実行結果

Fatal error: Uncaught TypeError: addition(): Argument #1 ($value1) must be of type float, string given, called in php-wasm run script on line 7 and defined in php-wasm run script:9 Stack trace: #0 php-wasm run script(7): addition('0', 1) #1 {main} thrown in php-wasm run script on line 9

まとめ

PHPでは暗黙の型変換が行われるため、厳密な型チェックを行いたい場合はdeclare(strict_types=1)を記載する。

参考

PHP: declare - Manual
PHP: 型宣言 - Manual
タイトルとURLをコピーしました