Php 在不引用密钥的情况下访问数组
我可以使用Php 在不引用密钥的情况下访问数组,php,syntax,Php,Syntax,我可以使用$array[key]或$array['key'] 是否有理由避免使用一个而不是另一个?使用后一种变体$array['key']。前者只会起作用,因为PHP是宽容的,如果没有常量命名键,则假定字符串值key: 始终在字符串文字数组索引周围使用引号。例如,$foo['bar']是正确的,而$foo[bar]不是。[…]这是错误的,但它是有效的。原因是这个[…]有一个未定义的常量(bar),而不是一个字符串('bar'-注意引号) 另见 现在,与在普通PHP代码中访问数组相反,在使用时,您
$array[key]
或$array['key']
是否有理由避免使用一个而不是另一个?使用后一种变体
$array['key']
。前者只会起作用,因为PHP是宽容的,如果没有常量命名键,则假定字符串值key
:
始终在字符串文字数组索引周围使用引号。例如,$foo['bar']
是正确的,而$foo[bar]
不是。[…]这是错误的,但它是有效的。原因是这个[…]有一个未定义的常量(bar
),而不是一个字符串('bar'
-注意引号)
另见
现在,与在普通PHP代码中访问数组相反,在使用时,您实际上需要不加引号地编写数组,或者使用:
[…]在双引号字符串中,不能用引号括住数组索引,因此“$foo[bar]”
是有效的。有关原因的详细信息,以及字符串中变量解析的部分,请参见上面的示例
因此:
$array[key]
用法不正确。在这种情况下,“key”将被视为常量(即通过define())而不是字符串。在没有常量命名键的情况下,PHP将假定您的意思是“键”,并为您“修复”它并抛出警告。如果没有定义常量命名键,PHP将对无引号版本($array[key]
)发出警告,并将其静默转换为$array['key']
。考虑一下如果有什么东西,调试代码的麻烦:
$array['foo'] = 'baZ'
echo $array[foo];
echo $array['foo'];
echo "$array[foo]";
echo "{$array['foo']}";
echo "{$array[foo]}";
define('foo', 'baR');
echo $array[foo];
echo $array['foo'];
echo "$array[foo]";
echo "{$array['foo']}";
echo "{$array[foo]}";
试用并查看,但请确保已启用警告(错误报告(E\u ALL)
和显示错误(1)
)
$array['foo'] = 'baZ'
echo $array[foo];
echo $array['foo'];
echo "$array[foo]";
echo "{$array['foo']}";
echo "{$array[foo]}";
define('foo', 'baR');
echo $array[foo];
echo $array['foo'];
echo "$array[foo]";
echo "{$array['foo']}";
echo "{$array[foo]}";