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

Php “NetBeans”;变量$out似乎未初始化“;,php,netbeans,hint,Php,Netbeans,Hint,虽然一般来说,提示是一件好事,但有一种情况我觉得很烦人,我想知道是否有一种简单的方法可以解决 考虑一个只有输出变量的函数: function dumb_foo($param1, $param2, &$out = null) { $out = $param1.'||'.$param2; return $param1*$param2; } 现在打电话,例如: dumb_foo(5, 6, $my_out); 结果是一个提示,即使它是由函数填充的。是的,可以先初始化变量 $my_o

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

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

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);
但这是多余的


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

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

就我所知,我认为最好的方法是先看看passbyreference实际上是如何工作的

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

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

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

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

    //No initialization of $in
    increment($in);
    echo $in; //add up to 1
情况2:引用变量
$in
未初始化,但参数
$out
已初始化

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

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

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

    //No initialization of $in
    increment($in);
    echo $in; //add up to 1
情况3:引用变量
$in
未初始化,参数
$out
未初始化

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

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

    //No initialization of $in
    increment($in);
    echo $in; // add up to 1
    //NOTE:No effect on referenced variable
    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);

希望这有帮助

Netbeans在
Tools->Options->Editor->hits->PHP->Uninitialized Variabled
下有一个选项,叫做
检查引用初始化的变量

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


更多信息:

感谢您的评论,但这既不是对我问题的回答,也没有帮助。您是否考虑过,也许我添加了默认值,这样我就可以选择不通过一个参数,如果我不需要它的话?我指的是“结果中的提示,即使它被函数填充了”。-这向我表明,您误解了生成提示的原因,因为提示是在调用函数之前生成的,所以它实际上与函数没有任何关系。如果我错了,那么我道歉。我的意思是调用的函数是分配值的函数,所以我没有必要(在我这边)初始化它。因此,据您所知,PHP(或NetBeans)没有将变量定义为out的选项,只是为了确保调用者没有在其中放入不必要的null?谢谢您的回答,但您所写的似乎并没有回答我的问题。无论哪种方式都会有一个提示。为什么&$out=null我在使用netbeans 8.1和PHP5.6项目时没有得到这个提示。感谢您的回答。选中此选项并查看源代码并没有删除提示。取消勾选并再次尝试没有任何区别。你自己测试过这个吗?好的,不管我是否检查“通过引用初始化的检查变量”,至少在NetBeans 8.02和8.1中,提示仍然存在。我得投票否决这个答案。