2014-09-26 58 views
12

我正在運行PHP 5.5,並且無法讓它拋出未定義的抵消通知。爲什麼PHP不會拋出「未定義偏移量」的通知?

$ 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 

我做錯了什麼或未定義的抵消通知已取消大多數數據類型?

+2

要比較php版本:http://3v4l.org/1UoqI – DanFromGermany 2014-09-26 12:57:44

回答

2

使用以下並扔在所有PHP版本的通知:

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

所有其他的變化通常不會發出通知:http://3v4l.org/18qM5

2

我不能給你確切的解釋,爲什麼你可以像數組一樣訪問'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保持它在內存中,但它不用於任何東西。使用方括號設置變量後,該變量變成一個數組,現在可以作爲一個數組訪問(就像我們預計什麼時候某個數組是數組)。

$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: 因爲變量自動澆注到一個數組。

+0

謝謝您的回答。我想你對讀取和寫入上下文的工作方式有些困惑。 – tacone 2014-09-26 16:00:11