2014-09-26 13 views
12

Sto eseguendo PHP 5.5 e non riesco a farlo lanciare un avviso di offset non definito più.Perché PHP non lancia più la notifica "offset non definito"?

$ 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 

Sto facendo qualcosa di sbagliato o l'avviso di offset non definito è stato abolito per la maggior parte dei tipi di dati?

+2

Per confrontare le versioni di php: http://3v4l.org/1UoqI – DanFromGermany

risposta

2

Utilizzando la seguente non gettare la comunicazione in tutte le versioni di PHP:

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

Tutte le altre varianti di solito non danno un avviso: http://3v4l.org/18qM5

2

non posso darvi la spiegazione esatta per cui si può accedere a un valore 'NULL' come un array, ma dal momento che PHP 5.X è possibile ottenere il carattere X'th di una stringa usando le parentesi quadre.

Date un'occhiata al seguente esempio:

$string = "testing this stringy thingy"; 

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

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

penso che questo abbia qualcosa a che fare con l'accesso a 'NULL' utilizzando le parentesi quadre ... Forse qualcun altro può aiutare con una risposta migliore :)

Aggiornamento

Quando si imposta la variabile come 'NULL', PHP lo tiene in memoria, ma non viene utilizzato per qualsiasi cosa. Dopo aver impostato la variabile usando le parentesi quadre, la variabile si trasforma in una matrice e ora può essere letta come una (come ci si aspetta quando qualcosa è una matrice).

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

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

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

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

Quindi, perché è PHP non gettare un 'E_NOTICE'error: Poiché la variabile viene colato automaticamente a un array.

+0

Grazie per la risposta. Penso che tu abbia un po 'di confusione su come funzionano i contesti di lettura e scrittura. – tacone

Problemi correlati