役立つ情報
登録日: 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); を記述することが推奨されます。


Copyright 役立つ情報.net