为什么PHP不';“t扔”;“未定义的偏移量”;注意到了吗?

为什么PHP不';“t扔”;“未定义的偏移量”;注意到了吗?,php,Php,我正在运行PHP5.5,无法再让它抛出未定义的偏移量通知 $ php -a Interactive mode enabled php > error_reporting(E_ALL); php > $b = null; php > var_dump($b['foo']); NULL php > $b = "string"; php > var_dump($b['foo']); PHP Warning: Illegal string offset 'foo' in

我正在运行PHP5.5,无法再让它抛出未定义的偏移量通知

$ php -a
Interactive mode enabled

php > error_reporting(E_ALL);
php > $b = null;
php > var_dump($b['foo']);
NULL
php > $b = "string";
php > var_dump($b['foo']);
PHP Warning:  Illegal string offset 'foo' in php shell code on line 1
string(1) "s"
php > $b = 345678;
php > var_dump($b['foo']);
NULL

我是否做错了什么,或者大多数数据类型的未定义偏移量通知都被取消了?

使用以下命令会在所有PHP版本中引发该通知:

$b = array();
var_dump($b['foo']); 

所有其他变体通常都不会给出提示:

我无法给您确切解释为什么可以像数组一样访问“NULL”值,但由于PHP 5.X,因此可以使用方括号获取字符串的第X个字符

请看以下示例:

$string = "testing this stringy thingy";

$character = $string[0]; 
echo $character; //returns 't'

$character = $string[21];
echo $character; //returns 'h'
我认为这与使用方括号访问“NULL”有关。。。也许其他人可以提供更好的答案:)

更新

当将变量设置为“NULL”时,PHP会将其保存在内存中,但不会用于任何用途。使用方括号设置变量后,该变量将变成一个数组,现在可以作为一个数组进行访问(就像我们在数组中所期望的那样)

那么,为什么PHP没有抛出“E_NOTICE”错误:
因为变量会自动转换为数组。

要比较php版本,请回答:谢谢。我想你对阅读和写作环境是如何工作的有些困惑。
$string = null;
$string['abc'] = 123;

print_R($string); //Array ( [abc] => 123 )

echo gettype($string); //outputs "array". 

var_dump(isset($string['abc'])); //returns "true"