duanpanhuo0618
2018-08-04 22:14
浏览 529
已采纳

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

I am using the answer found at https://stackoverflow.com/a/25749660 in order to sort the $_SERVER['HTTP_ACCEPT_LANGUAGE'] array by the most preferred language.

In that answer (which is working great by the way), one line is:

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

Within PhpStorm, I get the following error for that line:

"Unused local variable $b: The value of the variable is overwritten immediately".

I'm a little confused as to what this line is doing exactly, so I don't know if I should just keep it the same, or if I should modify it to:

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

... which also seems to be working fine.

Should it be changed?

图片转代码服务由CSDN问答提供 功能建议

我使用的答案是 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条回答 默认 最新

  • duanjie5570 2018-08-04 22:29
    已采纳

    You can't join arrays with the arithmetic operator +. Basically you are telling PHP to convert the arrays to scalar types and then sum them, which yields you a number (probably arrays evaluate to 1 if it has elements and 0 if it doesn't).

    The result is that effectively you are doing something like:

    list($a, $b) = 2;
    

    And the conclusion PHP reaches is that you haven't specified enough elements to define all the variables in the list.

    To join two arrays together, use array_merge().

    list($a, $b) = array_merge(explode('-', $match[1]), array('', ''));
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • dongxinxin7809 2018-08-05 08:05

    The wording is confusing because it's a full explanation for an inspection that covers two situations and the initial tooltip only displays the first line, which happens to describe the other situation. If you hit Ctl+F1 you can read the complete text, which kind of makes more sense (emphasis mine):

    Unused local variable 'b'. The value of the variable is overwritten immediately. less... (Ctrl+F1)

    Inspection info: A variable is considered unused in the following cases:

    • The value of the variable is not used anywhere or is overwritten immediately.
    • The reference stored in the variable is not used anywhere or is overwritten immediately.

    That's exactly what happens here:

    list($a, $b) = …
    

    $a is used later but $b is not. Since $b is never used, this works as well:

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

    (Remember these inspections are hints to prevent potential bugs, not necessarily errors.)

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题