PHP:为什么当你为没有现有索引的数组添加值时它不会引发注意?

pov*_*ils 7 php arrays

例如:

$array = [];

echo $array['bar']; // PHP NOTICE - trying to access not existing key`

$array['bar'][] = 'foo'; // Nothing
Run Code Online (Sandbox Code Playgroud)

我知道它创建了带有索引'bar'的数组,但PHP如何在内部处理?

CGr*_*fin 4

$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 正在初始化数组索引,就像初始化变量一样。

  • 因为从功能上来说,您并不是试图为不存在的键设置值。您正在设置一个键和其中的另一个键,并为该键分配一个值。PHP 足够智能,可以将密钥创建级联下来。这与您尝试访问不存在的密钥时相反,在这种情况下 PHP 无能为力。 (3认同)