PHP:list()提供PhpStorm中未使用的局部变量错误

时间:2018-08-04 22:14:53

标签: php phpstorm

我使用在https://stackoverflow.com/a/25749660处找到的答案,以便按最喜欢的语言对$_SERVER['HTTP_ACCEPT_LANGUAGE']数组进行排序。

在该答案中(顺便说一句效果很好),一行是:

list($a, $b) = explode('-', $match[1]) + array('', '');

在PhpStorm中,该行出现以下错误:

“未使用的局部变量$ b:该变量的值将立即被覆盖。”

我对这条线到底在做什么有些困惑,所以我不知道我是否应该保持不变,还是应该将其修改为:

list($a) = explode('-', $match[1]) + array('', '');

...似乎也可以正常工作。

应该更改吗?

2 个答案:

答案 0 :(得分:0)

措辞令人困惑,因为它是对涵盖两种情况的检查的完整解释,并且初始工具提示仅显示第一行,恰好描述了其他情况。如果您按下 Ctl + F1 ,则可以阅读全文,这更有意义(强调我的意思):

  

未使用的局部变量'b'。变量的值被覆盖   立即。更少...(Ctrl + F1)

     

检查信息:以下变量被认为未使用   情况:

     
      
  • 该变量的值在任何地方都不会使用,或者会立即被覆盖。
  •   
  • 存储在变量中的引用不在任何地方使用或被立即覆盖。
  •   

这正是这里发生的情况:

list($a, $b) = …

$a稍后使用,但不使用$b。由于从未使用过$b,因此效果很好:

list($a) = explode('-', $match[1]) + array('', '');

(请记住,这些检查是为了防止潜在的错误(不一定是错误)。

答案 1 :(得分:-1)

您不能使用算术运算符+连接数组。基本上,您是在告诉PHP将数组转换为标量类型,然后对其求和,这会产生一个数字(如果数组包含元素,则数组的值为1,否则为0)。

结果是您实际上正在执行以下操作:

list($a, $b) = 2;

PHP得出的结论是,您没有指定足够的元素来定义列表中的所有变量。

要将两个数组连接在一起,请使用array_merge()

list($a, $b) = array_merge(explode('-', $match[1]), array('', ''));