忽略"变量可能尚未定义"在特定的地方

时间:2017-08-11 10:07:51

标签: phpstorm

我有这样的代码

<?php
$first_condition = time() % 2 == 0;
$second_condition = time() % 3 == 0;

if ($first_condition) {
    if ($second_condition) {
        $param1 = 'param1_1_1';
    } else {
        $param1 = 'param1_2_1';
        $param2 = 'param2_2_1';
    }
} else {
    if ($second_condition) {
        $param1 = 'param1_1_2';
    } else {
        $param1 = 'param1_2_2';
        $param2 = 'param2_2_2';
    }
}

if ($second_condition) {
    $param2 = $param1;
}

$total = array(
    'param1' => $param2,
    'param2' => $param1,
);

我真的知道$param2无论如何都会被定义,但是PhpStorm说它错了。

enter image description here

是否有任何方法可以将此地方标记为忽略此检查?只有这个地方,而不是全局设置,只有此检查,而不是全部。

1 个答案:

答案 0 :(得分:3)

当然 - 您可以对该声明禁止此类警告。

标准程序:

  1. 将插入符号放在此类错误/警告上。
  2. 调用 Alt + Enter 以带来快速修复菜单(或通过灯泡图标)。
  3. 找到正确的检查。
  4. 使用键盘或使用鼠标展开子菜单(例如向右箭头 - 注意:点击区域可能非常小 - 取决于使用的GUI主题)。
  5. 选择Suppress for statement选项。
  6. 上面将在该语句之前添加特殊的PHPDoc注释/** @noinspection PhpUndefinedVariableInspection */) - 它告诉IDE忽略该特定问题。

    https://www.jetbrains.com/help/phpstorm/suppressing-inspections.html?search=suppress

    另一方面(特别是如果它是您编辑的代码/代码):为什么不走一条更安全的路线,只是声明那些带有默认值的$paramX变量(例如空字符串)条件 ...所以变量确实会被定义?这将防止IDE的这种虚假抱怨(当它试图静态分析这种相当复杂的逻辑时)。

      

    新的子问题:是否可以仅使用param1禁用param2但不允许/** @noinspection PhpUndefinedVariableInspection */的检查?

    是和否。

    • 不更改代码 - 否。这些变量都在一个语句(数组定义)中使用,抑制注释应用于整个语句

      < / LI>
    • 是 - 如果您需要这样的单独抑制,请将其拆分为2个语句。