例如:
$array = [];
echo $array['bar']; // PHP NOTICE - trying to access not existing key`
$array['bar'][] = 'foo'; // Nothing
Run Code Online (Sandbox Code Playgroud)
我知道它创建了带有索引'bar'的数组,但PHP如何在内部处理?
$array['bar'][] = 'foo';不会返回通知或错误,因为没有错误。您正在创建一个新的数组索引,以及其中的另一个索引,并为其分配一个值。这就是声明的意思。没有返回错误。
如果您希望在未设置特定数组索引时具有行为,可以使用 array_key_exists ( http://php.net/manual/en/function.array-key-exists.php ):
if(array_key_exists('bar', $array)){
$array['bar'][] = 'foo';
} else {
// something else
}
Run Code Online (Sandbox Code Playgroud)
也就是说,这个问题是否具有功能性(即,您正在尝试完成某些特定的事情)。如果问题更具概念性 - 为什么 PHP 不将变量赋值读取为错误:
PHP 能够在一行中初始化和分配变量,即$foo = 'bar'. 即使之前没有定义,这也不会返回错误,$foo因为 PHP 首先初始化变量。同样的方法也适用于数组索引。$array['foo'][] = 'bar'不会返回错误或通知,因为 PHP 正在初始化数组索引,就像初始化变量一样。