繁体   English   中英

PHP:list()在PhpStorm中给出未使用的局部变量错误

[英]PHP: list() giving unused local variable error in 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('', '');

...这似乎也很好。

应该改变吗?

措辞令人困惑,因为它是涵盖两种情况的检查的完整解释,而初始工具提示仅显示第一行,恰好描述了另一种情况。 如果你点击Ctl + F1你可以阅读完整的文本,哪种更有意义(强调我的):

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

检验信息:在以下情况下,变量被视为未使用:

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

这正是这里发生的事情:

list($a, $b) = …

$a以后使用,但$b不是。 由于$b从未使用过,因此也适用:

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

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

您不能使用算术运算符+连接数组。 基本上你要告诉PHP将数组转换为标量类型然后求和它们,这会产生一个数字(如果有元素,可能数组的计算结果为1,如果没有则可能为0)。

结果是你有效地做了类似的事情:

list($a, $b) = 2;

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM