Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在不引用密钥的情况下访问数组_Php_Syntax - Fatal编程技术网

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]}";