[英]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.