Questo è uno degli errori più comuni quando si lavora con PHP. L’errore Illegal string offset… si verifica quando si prova ad accedere ad una stringa come se fosse un array.
In realtà, con PHP è possibile trattare una stringa come fosse un array per accedere alle singole lettere, in questo modo:
$var = 'Mr. Webmaster';
echo $var[0]; // M
echo $var[1]; // r
echo $var[2]; // .
Fin qui nessun errore. E’ tutto corretto.
Il problema si verifica se proviamo ad accedere ad un indice inesistente, ad esempio:
echo $var['url'];
In questo caso otterremo l’errore:
PHP Warning: Illegal string offset 'url' in ...
Questo perchè abbiamo trattato la string $var come un array, ma non lo è!
Onde evitare di incorrere in questo errore è opportuno, nello scrivere codice PHP, utilizzare sempre gli opportuni controlli preliminari, sfruttando le funzioni is_array(), array_key_exists() e isset().
Ad esempio:
$var = 'Mr. Webmaster';
if (is_array($var) && isset($var['url'])) {
echo $var['url'];
}
/*
oppure
*/
if (is_array($var) && array_key_exists('url',$var)) {
echo $var['url'];
}
E’ importante sottolineare, in merito a questo ultimo esempio, che c’è una certa differenza tra l’utilizzare isset() e array_key_exists(): la prima funzione, infatti, restituirà false se il valore di $var[‘url’] è null, viceversa la seconda restituirà true o false semplicemente a seconda che la chiave esista oppure no (a prescindere, cioè, dal suo valore).