PHPStormは、他のファイルのすべての変数(必須とインクルードの両方)が未定義であることを示しました。この解決策を見つけました ここ 、しかしそのオプションIgnore 'include' and 'require' statements
を無効にした後、IDEはすべての未定義の変数を無視しました。
たとえば、コンテンツがa.php
のファイル$name = 'Bob'
と、ファイルb.php
が必要なファイルa.php
があります。ファイルecho $name
にb.php
と入力すると、期待どおりに機能し、'Bob'
が表示されます。ただし、IDEは、変数$name
を強調表示して、未定義であると主張しています。そのオプション'Undefined variable' - Ignore 'include' and 'require' statements
を無効にすると、IDEは強調表示を停止します。
このオプションを使用すると、たとえばファイル$sdadasdasdas
にb.php
などの変数を書き込むことができ、IDEはそれを強調表示しません。
PHPStormは、インクルード/必須ファイルに設定されている変数と設定されていない変数を理解できますか?
Hakreが指摘したように、この警告はコードの臭いの兆候である可能性があります。ただし、以前にinclude
またはrequire
呼び出しがあった場合は、PHPStormによる未定義変数の検査を無効にすることができます。
「設定」/「エディター」/「検査」/「PHP」/「「インクルード」および「必須」ステートメントを無視する」という未定義変数のラジオボタンのチェックを外します。
この検査を無効にしたくない場合は、PHPStormの @ noinspectionアノテーション を使用して、単一のステートメントに対して無効にすることができます。 。コード例:
require $path; // $some_variable is defined in that file
/** @noinspection PhpUndefinedVariableInspection */
$config["DBSettings"] = [
"server" => $some_variable
];
はい、そうです。ただし、これは、コードで発生する可能性が最も高い(Phpstormが具体的に警告できない)別の問題を示唆するはずです。include
およびrequire
。
コードをさらにモジュール化することで、ここで簡単に改善できます。 関数を利用 パラメータ付き。さらに、オブジェクトを使用してクラスとプログラムの作成を開始することを検討できます(ただし、PHPでは必要ありません)。
PHPStorm自体の場合、注釈付きの単一または複数のステートメントを除外して、特定の場所で警告を無効にすることができます。ただし、「誤検知」が多い場合、これは面倒です。このところで。検査警告で動作します。
同様に参照してください:
上記のすべての回答は、imhoが適切な解決策ではない警告を削除または抑制します。
最善の解決策は、使用された変数を含むdocブロックを含むヘッダーを追加することです。
例:
<?php
/**
* @var string $name
* @var FormData $form
*/
?>
これにより、「未定義の変数」の警告が表示されなくなるだけでなく、コードが文書化され、オートコンプリートが期待どおりに機能するようになります。
関数の先頭だけでなく、他のファイルの先頭でもglobal $db
を使用することにより、phpstormは、その変数の宣言と/** @var
ステートメントの場所を何らかの方法で見つけ出します。
個人的には、警告の重大度を下げるだけです。これは、事前のinclude/requireステートメントがあるかどうかに関係なく適用されます。 [設定] >> [エディター] >> [検査] >> [PHP] >> [未定義] >> [[未定義の変数]を強調表示]、ドロップダウンメニューを使用して[重大度]を調整します。