【问题标题】:NetBeans "Variable $out seems to be uninitialized"NetBeans“变量 $out 似乎未初始化”
【发布时间】:2016-04-13 21:33:14
【问题描述】:

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

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

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

但它是多余的。

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

【问题讨论】:

  • 为什么 &$out = null
  • 我没有得到这个提示使用带有 php 5.6 项目的 netbeans 8.1。

标签: php netbeans hint


【解决方案1】:

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

无论如何,您都可以完全关闭“统一变量”提示:

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

【讨论】:

  • 感谢您的评论,但这不是我问题的答案,也没有帮助。您是否考虑过我可能添加了默认值,以便在不需要时选择不传递参数?
  • 我指的是“即使它被函数填充,也会产生提示”。 - 这向我表明您误解了为什么要生成提示,因为提示是在调用函数之前生成的,所以它实际上与函数没有任何关系。如果我弄错了,我很抱歉。
  • 我的意思是调用的函数是分配值的函数,所以我不需要(在我这边)初始化它。所以据您所知,PHP(或 NetBeans)没有选项将变量定义为 out-only 以确保调用者不会在其中放入不必要的 null?
【解决方案2】:

据我所知,我认为最好的方法是首先了解通过引用传递的实际工作原理。

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

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

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

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

希望这会有所帮助!

【讨论】:

  • 感谢您的回答,但您所写的内容似乎没有回答我的问题。无论哪种方式都会有提示。
【解决方案3】:

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

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

更多信息:NetBeans bug thread

【讨论】:

  • 感谢您的回答。检查此选项并查看源代码并没有删除提示。取消选中并再次尝试没有任何区别。你自己测试过吗?
  • 好吧,提示仍然存在,无论我是否检查“检查由引用初始化的变量”,至少对于 NetBeans 8.02 和 8.1。我将不得不对这个答案投反对票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2016-03-01
  • 1970-01-01
相关资源
最近更新 更多