虽然一般来说提示是件好事,但我觉得这种情况很烦人,并且想知道是否有一种简单的方法。
考虑一个只有输出变量的函数:
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);
但这是多余的。
在没有完全删除或添加不需要的初始化的情况下,还有其他方法可以避免这种情况下的提示吗?
答案 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