Php 什么';$foo[';bar';]=";“价值”;和$foo[bar]=”;“价值”;

Php 什么';$foo[';bar';]=";“价值”;和$foo[bar]=”;“价值”;,php,Php,我有一段代码,看起来像: $foo[bar]="value 1"; $foo[time]="value 2"; $foo[location]="value 3"; ... 我认为应该是$foo['bar']=“value 1”,但我想知道为什么(以及了解更多相关信息的术语),以及如果这是“坏代码”,为什么它会起作用?不使用代码有什么危险?添加引号会破坏某些东西的可能性有多大 跟进/奖金: 嵌套数组呢 $colors=array("r"=>"red","b"=>"black","u"

我有一段代码,看起来像:

$foo[bar]="value 1";
$foo[time]="value 2";
$foo[location]="value 3";
...
我认为应该是
$foo['bar']=“value 1”
,但我想知道为什么(以及了解更多相关信息的术语),以及如果这是“坏代码”,为什么它会起作用?不使用代码有什么危险?添加引号会破坏某些东西的可能性有多大

跟进/奖金: 嵌套数组呢

$colors=array("r"=>"red","b"=>"black","u"=>"blue");
...
$foo[$colors["r"]]="value";
or
$foo["$colors["r"]"]="value";

这里我想要第一个,因为我用一个变量作为键

正如费德里科在评论中所说。这两者的意思不同。不带引号的是一个变量。$foo[bar]中变量bar的内容取决于之前分配给它的内容。带有引号“bar”的字符串是一个值固定的字符串,它将指定“bar”作为键

至于您的问题是哪一个以及为什么,这实际上取决于场景,但对于大多数情况,您可能会使用“条形”版本而不是可变条形版本,原因如下:

  • 变量版本可能会产生错误。我说可能取决于流量。这是因为代码的其他部分分配了一个错误的值,它不应该在那里,或者该条根本没有被分配
  • 固定的“条形”版本更加明确。每一个读代码的人都知道关键是什么。没有猜测 引用版本为“bar”的唯一标注以及它可能不好的原因是因为字符串硬编码为“bar”。假设你把这个$foo['bar']放在10个地方,有一天你决定把它从'bar'改成'bar1',那么你就需要把它放在10个地方。更糟糕的是,您可能只更改了其中9个,而忘记更改一个引入新错误的。键最好变成一个常量,并在代码中引用该常量。这样,如果需要更改键名,只需为其指定新值,所有位置都会相应地更新。这通常是至少我知道的编程语言遵循的规则


    我希望这个答案能有所帮助。

    正如费德里科在评论中所说。这两者的意思不同。不带引号的是一个变量。$foo[bar]中变量bar的内容取决于之前分配给它的内容。带有引号“bar”的字符串是一个值固定的字符串,它将指定“bar”作为键

    至于您的问题是哪一个以及为什么,这实际上取决于场景,但对于大多数情况,您可能会使用“条形”版本而不是可变条形版本,原因如下:

  • 变量版本可能会产生错误。我说可能取决于流量。这是因为代码的其他部分分配了一个错误的值,它不应该在那里,或者该条根本没有被分配
  • 固定的“条形”版本更加明确。每一个读代码的人都知道关键是什么。没有猜测 引用版本为“bar”的唯一标注以及它可能不好的原因是因为字符串硬编码为“bar”。假设你把这个$foo['bar']放在10个地方,有一天你决定把它从'bar'改成'bar1',那么你就需要把它放在10个地方。更糟糕的是,您可能只更改了其中9个,而忘记更改一个引入新错误的。键最好变成一个常量,并在代码中引用该常量。这样,如果需要更改键名,只需为其指定新值,所有位置都会相应地更新。这通常是至少我知道的编程语言遵循的规则


    我希望这个答案有帮助。

    bar是变量,“bar”是字符串。
    所以区别在于,bar可以存储值,“bar”本身就是一个值。两者都将用作数组$arr中的键。但使用bar时,数组索引将发生变化,“bar”键索引将被固定$arr[bar]可以是索引或关联,而$arr['bar']将是关联数组。

    bar是变量,“bar”是字符串。
    所以区别在于,bar可以存储值,“bar”本身就是一个值。两者都将用作数组$arr中的键。但使用bar时,数组索引将发生变化,“bar”键索引将被固定$arr[bar]可以是索引或关联数组,$arr['bar']将是关联数组。

    bar
    是一个名为
    bar
    的常量,其内容取决于您为其分配的内容<代码>'bar'是一个字符串。您可能希望使用后一种方法是的,除非
    bar
    是一个已定义的常量,否则您会注意到:使用未定义的常量bar-假定为“bar”,在7.2中是一个警告,然后在未来的版本中是一个错误。关于后续操作,是的,第一种方法是正确的,因为它扩展到
    $foo['red']
    bar
    是一个名为
    bar
    的常量,其内容取决于您为其指定的内容<代码>'bar'是一个字符串。您可能希望使用后一种方法是的,除非
    bar
    是一个已定义的常量,否则您会注意到:使用未定义的常量bar-假定为'bar',在7.2中是一个警告,然后在将来的版本中是一个错误。关于后续操作,是的,第一种方法是正确的,因为它扩展到
    $foo['red']