С
isset
абсалютно верно. Но я бы не стал называть это «чтение», т.к.
isset
— это специальная конструкция языка. Если вы попытаетесь спросить индекс не-массива, то:
unset($a);
echo $a['a']['b']['c']; // будет warning
echo $a['a']; // тоже будет warning
isset($a['a']['b']['c']); // не будет warning'а
С записью тоже есть нюансы. Если переменная (даже если это элемент массива) не установлена, то её можно неявно использовать как массив. Но если она установлена и не является массивом, то могут быть проблемы:
<?php
unset($a);
$a['a'] = 'a'; // это ок
$a['b'] = 1; // это ок
$a['a'][0] = 'b'; // перезапишет первый символ строки!!!
$a['b'][0] = 'b'; // будет notice, про обращение к скаляру, как к массиву
unset($a);
$a['a']['b']['c']['d'] = 'str'; // тоже ок
$с = new SomeClass;
$с[0] = 'c'; // Если класс имплементил ArrayAccess интерфейс, то вызовется метод offsetGet,
// иначе Fatal error
Так что если не уверены, что содержится в переменной или элементе массива, то лучше явно проинициализируйте массив.