web-dev-qa-db-ja.com

PHP 7で 'strict_types'をグローバルに有効にする

現在、私のウェブサイトをPHP5からPHP7に移行しており、追加された厳密なタイピング機能の使用を開始しています。ただし、これにはすべてのファイルを次の行で開始する必要があります。

<?php declare(strict_types=1);

// All other code here
// ...

だから、strict_typesやApache設定ファイルのようなものを使用してphp.iniをグローバルに有効にする方法はあるので、毎回この行を書く必要はありません。この?

34
Paradoxis

これは意図的には不可能です。なぜなら、スカラー型のヒントの極めて長い議論の後に採用された実装は次のとおりだったからです: https:// wiki .php.net/rfc/scalar_type_hints_v5

スカラー型のチェック方法の選択を、その関数の作成者ではなく関数の呼び出し元に明示的に与えるため、次のようになります。

  • スカラー型のヒントを使用してライブラリを記述する場合、関数は、厳格モードで記述されていないコードによって呼び出された場合でも、要求されたパラメーター型を保証します(代わりに型が強制されます)
  • ライブラリを作成し、従来の弱い型付けが必要な場合でも、型ヒントを使用するライブラリを使用できます(厳密な型チェックを強制することはないため)
  • 逆に、ライブラリを作成し、呼び出す関数に厳密なタイピングが必要な場合、ライブラリのユーザーも厳密な入力を要求する必要はありません。タイピング
  • 組み込み関数はユーザー定義関数と同じように機能し、既存のコードはデフォルトで同じように実行されます
  • 厳密な型指定を有効にする場合は、コードを変更して正しく処理する必要があります

したがって、PHPどのファイルが厳密な型モードを使用するように記述されているか、されていないかを伝えるのはあなた次第です。これを行う方法はdeclareステートメントを使用する。

39
IMSoP

基本的にいいえ。

厳密モードを使用したライブラリのみが必要な場合、パッケージが不必要に分離されるためです。また、strict/weak typesオプションはPHPの単なる追加機能であると考えてください。

1
Danilo Calzetta