web-dev-qa-db-ja.com

PHPStorm:include / requireによって引き起こされた未定義の変数

PHPStormは、他のファイルのすべての変数(必須とインクルードの両方)が未定義であることを示しました。この解決策を見つけました ここ 、しかしそのオプションIgnore 'include' and 'require' statementsを無効にした後、IDEはすべての未定義の変数を無視しました。

たとえば、コンテンツがa.phpのファイル$name = 'Bob'と、ファイルb.phpが必要なファイルa.phpがあります。ファイルecho $nameb.phpと入力すると、期待どおりに機能し、'Bob'が表示されます。ただし、IDEは、変数$nameを強調表示して、未定義であると主張しています。そのオプション'Undefined variable' - Ignore 'include' and 'require' statementsを無効にすると、IDEは強調表示を停止します。

このオプションを使用すると、たとえばファイル$sdadasdasdasb.phpなどの変数を書き込むことができ、IDEはそれを強調表示しません。

PHPStormは、インクルード/必須ファイルに設定されている変数と設定されていない変数を理解できますか?

14
kxc

Hakreが指摘したように、この警告はコードの臭いの兆候である可能性があります。ただし、以前にincludeまたはrequire呼び出しがあった場合は、PHPStormによる未定義変数の検査を無効にすることができます。

「設定」/「エディター」/「検査」/「PHP」/「「インクルード」および「必須」ステートメントを無視する」という未定義変数のラジオボタンのチェックを外します。

enter image description here

この検査を無効にしたくない場合は、PHPStormの @ noinspectionアノテーション を使用して、単一のステートメントに対して無効にすることができます。 。コード例:

require $path; // $some_variable is defined in that file
/** @noinspection PhpUndefinedVariableInspection */
$config["DBSettings"] = [
    "server" => $some_variable
];
19
Andreas Fröwis

はい、そうです。ただし、これは、コードで発生する可能性が最も高い(Phpstormが具体的に警告できない)別の問題を示唆するはずです。includeおよびrequire

コードをさらにモジュール化することで、ここで簡単に改善できます。 関数を利用 パラメータ付き。さらに、オブジェクトを使用してクラスとプログラムの作成を開始することを検討できます(ただし、PHPでは必要ありません)。

PHPStorm自体の場合、注釈付きの単一または複数のステートメントを除外して、特定の場所で警告を無効にすることができます。ただし、「誤検知」が多い場合、これは面倒です。このところで。検査警告で動作します。

同様に参照してください:

9
hakre

上記のすべての回答は、imhoが適切な解決策ではない警告を削除または抑制します。

最善の解決策は、使用された変数を含むdocブロックを含むヘッダーを追加することです。

例:

<?php
/**
 * @var string $name
 * @var FormData $form
 */
?>

これにより、「未定義の変数」の警告が表示されなくなるだけでなく、コードが文書化され、オートコンプリートが期待どおりに機能するようになります。

8
Pawel Hawro

関数の先頭だけでなく、他のファイルの先頭でもglobal $dbを使用することにより、phpstormは、その変数の宣言と/** @varステートメントの場所を何らかの方法で見つけ出します。

2
Puggan Se

個人的には、警告の重大​​度を下げるだけです。これは、事前のinclude/requireステートメントがあるかどうかに関係なく適用されます。 [設定] >> [エディター] >> [検査] >> [PHP] >> [未定義] >> [[未定義の変数]を強調表示]、ドロップダウンメニューを使用して[重大度]を調整します。

1
Geoff Kendall