2014-09-26 15 views
12

PHP 5.5 çalıştırıyorum ve undefined ofset bildirimini artık alamıyor.PHP neden "undefined offset" uyarısını atmıyor?

$ 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 

ben yanlış mı yapıyorum ya tanımsız ofset bildirim çoğu veri türleri için kaldırılmıştır? Diğer tüm varyasyonları genellikle bir uyarı vermeyin

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

: tüm PHP sürümlerinde bildirimi atmak yok aşağıdakileri kullanarak

+2

php sürümlerini karşılaştırmak için: http://3v4l.org/1UoqI – DanFromGermany

cevap

2

Sana kesin bir açıklama yapamayız sebebini bir dizi gibi bir 'NULL' değerine erişebilir, ancak PHP 5.X'ten beri, köşeli ayraçları kullanarak bir dizenin X'th karakterini elde etmek mümkündür.

Aşağıdaki örnekte bir göz atın:

$string = "testing this stringy thingy"; 

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

$character = $string[21]; 
echo $character; //returns 'h' 

bu 'NULL' köşeli parantez kullanılarak erişen bir ilgisi olduğunu düşünüyorum ... Belki başkası daha iyi bir cevap :) ile yardımcı olabilir

Güncelleme

'NULL' olarak değişken ayarlama PHP belleğinde saklar ama herhangi bir şey için kullanılmaz. Değişkeni köşeli parantezler kullanarak ayarladıktan sonra, değişken bir diziye dönüşür ve şimdi bir tanesi olarak erişilebilir (bir şey bir dizi olduğunda beklediğimiz gibi).

$string = null; 
$string['abc'] = 123; 

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

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

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

Peki, neden bir 'E_NOTICE'error atma değil PHP'dir: değişken otomatik dizi için döküm edilir çünkü.

+0

Cevabınız için teşekkür ederiz. Okuma ve yazma bağlamlarının nasıl çalıştığına dair biraz kafa karışıklığınız var. – tacone

İlgili konular