所以我有一些看起来像的代码:
$foo[bar]="value 1";
$foo[time]="value 2";
$foo[location]="value 3";
...
我认为它应该是$foo['bar']="value 1"
,但我想知道为什么(以及了解更多相关信息的术语)以及为什么它可以工作如果这是&# 34;糟糕的代码"?单独留下代码有什么危险?添加引号会有什么机会破坏某些东西?
跟进/奖金: 嵌套数组怎么样?
$colors=array("r"=>"red","b"=>"black","u"=>"blue");
...
$foo[$colors["r"]]="value";
or
$foo["$colors["r"]"]="value";
这里我想要第一个,因为我使用变量作为键?!
答案 0 :(得分:3)
正如费德里科所说。这两个意味着不同的东西。没有引用的那个是变量。 $ foo [bar]中变量 bar 的内容取决于您之前分配的内容。带引号' bar' 的字符串是一个字符串,其值固定,它将分配' bar'作为关键。
对于你的问题是哪一个以及为什么,这实际上取决于场景,但对于大多数人来说,你可能会使用' bar'版本而不是变量 bar 版本,原因如下:
带引号版本的唯一标注' bar'为什么它可能是坏的是因为字符串被硬编码为' bar的性质。假设您在10个地方推荐这个$ foo [' bar'],并且有一天您决定从' bar'到' bar1',然后你需要在10个地方更改它。更糟糕的是,你可能只改变了其中的9个并且忘了改变引入新bug的那个。密钥最好成为常量并在代码中引用该常量。这样,如果您需要更改密钥名称,您可以为其分配新值,并相应地更新所有位置。这通常是至少我知道的编程语言遵循的规则。
我希望这个答案有所帮助。
答案 1 :(得分:1)
bar是变量,'bar'是字符串。 不同的是,bar可以存储值,“bar”本身就是一个值。两者都将用作数组$ arr中的键。但是使用bar,数组索引会变化,并且'bar'将修复关键索引。 $ arr [bar]可以是索引或关联的,而$ arr ['bar']将是关联数组。