我正在运行PHP 5.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
我做错了什么或者大多数数据类型都取消了未定义的偏移通知吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
我无法准确地解释为什么你可以像数组一样访问'NULL'值,但是从PHP 5.X开始,可以使用方括号来获取字符串的第X个字符。 / p>
看看下面的例子:
$string = "testing this stringy thingy";
$character = $string[0];
echo $character; //returns 't'
$character = $string[21];
echo $character; //returns 'h'
我认为这与使用方括号访问'NULL'有关...也许其他人可以提供更好的答案:)
<强>更新强>
当将变量设置为'NULL'时,PHP将其保存在内存中,但它不用于任何内容。在使用方括号设置变量之后,变量变成一个数组,现在可以作为一个数组进行访问(就像我们期望什么是数组一样)。
$string = null;
$string['abc'] = 123;
print_R($string); //Array ( [abc] => 123 )
echo gettype($string); //outputs "array".
var_dump(isset($string['abc'])); //returns "true"
那么,为什么PHP不会抛出'E_NOTICE'error: 因为变量会自动转换为数组。