NetBeans“可变$ out似乎未初始化”

时间:2016-01-09 05:16:05

标签: php netbeans hint

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

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

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);

但这是多余的。

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

3 个答案:

答案 0 :(得分:1)

据我所知,我认为最好的方法是首先看一下参考传递是如何实际运作的。

案例1:引用变量$in已初始化,但参数$out NOT 已初始化

function increment(&$out) {
  $out++;
}

$in = 4 ; //NOTE: already initialized
increment($in);
echo $in; //add up to 5

案例2:引用变量$in NOT 已初始化但参数$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:引用变量$in NOT 已初始化且参数$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);

希望这有帮助!

答案 1 :(得分:0)

我认为您误解了默认值的工作原理。问题是,当您进行以下调用时,$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

答案 2 :(得分:0)

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

的选项

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

更多相关信息:NetBeans bug thread