【问题标题】:PHP -- $$array[] = $somthing; — Cannot use [] for reading error [duplicate]PHP -- $$array[] = $somthing; — 不能使用 [] 读取错误 [重复]
【发布时间】:2020-12-20 08:29:31
【问题描述】:

我正在编写其他人的 PHP 代码,而我的 IDE (PHPstorm) 正在用错误 Cannot use [] for reading 标记这一行。代码工作正常,但我试图用我有限的 PHP 技能来理解为什么。我在其他文件中看到了双美元符号并且没有错误。

$somevar    = ($test_me) ? "some-class" : "some-other-class";
$$somevar[] = $some_value; // $somevar[] is flagged

【问题讨论】:

  • 可变变量不是一种好的编程方式。请改用数组。
  • 这在 PHP 7 之前不会起作用 - 您是否有机会设置 IDE 以针对 v5.X 进行验证但在 7+ 中运行它?
  • 以“概述”开头的欺骗的答案解释了为什么这在 PHP7 中是合法的,但在 PHP5 中是不合法的

标签: php arrays


【解决方案1】:

使用大括号{ } 进行插值:

$somevar = "some-other-class";
${$somevar}[] = "foo";
var_dump(${$somevar});

输出:

array(1) {
  [0] => string(3) "foo"
}

【讨论】:

    【解决方案2】:

    这不是你问题的答案,而是我和其他大多数人认为你应该做的。
    切换到一个数组,这样你就有一个变量,其中包含所有变量。
    您可以循环数组以查找您需要的内容,并且您不会分配可能与其他变量冲突的变量名称。

    $some_value =1;
    $test_me = true;
    
    $somevar    = ($test_me) ? "some-class" : "some-other-class";
    $arr[$somevar] = $some_value;
    
    var_dump($arr);
    

    这会产生一个关联数组,其键为“some-class”,值为 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      相关资源
      最近更新 更多