NetBeans”;变量$out似乎未初始化;


NetBeans "Variable $out seems to be uninitialized"

虽然一般来说提示是件好事,但有一种情况我觉得很烦人,我想知道是否有简单的方法可以解决。

考虑一个只有输出变量的函数:

function dumb_foo($param1, $param2, &$out = null) {
  $out = $param1.'||'.$param2;
  return $param1*$param2;
}

现在打电话,例如:

dumb_foo(5, 6, $my_out);

即使由函数填充,也会产生提示。所以是的,可以先初始化变量

$my_out = null;
dumb_foo(5, 6, $my_out);

但这是多余的。

在这种情况下,有没有其他方法可以在不完全删除提示或添加不必要的初始化的情况下避免提示?

据我所知,我认为最好的方法是首先看看引用传递的实际工作方式。

情况1:引用的变量$in已初始化,但参数$outNOT已初始化

function increment(&$out) {
  $out++;
}
$in = 4 ; //NOTE: already initialized
increment($in);
echo $in; //add up to 5

情况2:引用变量$inNOT已初始化,但参数$out已初始化

    function increment(&$out = 4) {
      $out++;
    }
    //No initialization of $in
    increment($in);
    echo $in; // add up to 1
    //NOTE:No effect on referenced variable

情况3:引用变量$inNOT初始化,参数$out>NOT初始化

    function increment(&$out) {
      $out++;
    }
    //No initialization of $in
    increment($in);
    echo $in; //add up to 1

在我自己看来,情况3对于您描述的示例将是一个有效的解决方案。因此,删除$out$my_out的初始化应该可以很好地完成这项工作。类似这样的东西:

function dumb_foo($param1, $param2, &$out) {
  $out = $param1.'||'.$param2;
  return $param1*$param2;
}
dumb_foo(5, 6, $my_out);

希望这能有所帮助!

我认为您误解了默认值的工作方式。问题是,当您进行以下调用时,没有定义$my_out

dumb_foo(5, 6, $my_out);

因此,您实际上是在传递null(而不是根本不传递参数),这意味着您的默认值从未被使用过(巧合的是,您的缺省值也是null)。为了说明差异:

function dumb_foo(&$out = 'a') {
  print $out . "'n";
}
dumb_foo($i); // $i is not defined, so prints nothing
dumb_foo(); // prints 'a', the default value

在任何情况下,您都可以完全关闭"Unitialized Variable"提示:

Tools -> Options -> Editor -> Hints -> PHP -> Unitialized Variables

Netbeans在Tools -> Options -> Editor -> Hints -> PHP -> Uninitialized Variabled下有一个名为Check Variables Initialized by Reference 的选项

显然在默认情况下是关闭的,因为它会影响IDE的性能。

更多关于这个:NetBeans错误线程