登録日:
2025-02-05
最終更新日:
2025-03-07
php declare(strict_types=1) の効力範囲について
declare(strict_types=1); の効力範囲は、ファイル単位 です。
効力の範囲
- declare(strict_types=1); を記述したファイル内 でのみ適用されます。
- 別のファイルを include や require で読み込んでも、そのファイルには影響しません。
- そのため、読み込まれる側のファイルにも declare(strict_types=1); を記述する必要があります。
具体例
// strict_types_on.php
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
}
echo add(2, 3); // OK
echo add(2, "3"); // エラー: 厳密な型チェックによりstringをintとして渡せない
// strict_types_off.php
function multiply(int $a, int $b): int {
return $a * $b;
}
echo multiply(2, "3"); // OK: strict_typesが有効でないためstringがintに自動変換される
// main.php
require 'strict_types_on.php';
require 'strict_types_off.php';
echo multiply(2, "3"); // OK: strict_typesが有効でないファイル内の関数なので型変換される
重要なポイント
- declare(strict_types=1); はファイル単位で適用 される。
- 別のファイルを読み込んでも、そちらには影響しない。
- 関数やクラスの宣言自体には影響しない ため、strict_types=1 のファイルで宣言された関数を strict_types=0 のファイルから呼び出すと、呼び出し元のルールに従う。
このため、プロジェクト全体で厳密な型チェックを徹底したい場合は、すべての PHP ファイルの冒頭に declare(strict_types=1); を記述することが推奨されます。