Un exemple comparatif en PHP :
isset($var) va vérifier si $var est défini. Tu peux demander si isset($var['index']['sous_index']) et il te renverra false si $var, $var['index'] ou $var['index']['sous_index'] n'existe pas.
empty($var) vérifie si une valeur est "vide" (non définie, false, 0, 0.0, chaîne vide, array vide). Mais si tu demandes empty($var['index']['sous_index']), si un niveau intermédiaire est indéfini ($var ou $var['index']), il te génère un warning.
Godzil (./167) :
Sa ne serait pas du tout si tu ne pouvais pas faire un
Je ne suis pas d'accord là dessus, car il s'agit d'une attribution. Si tu dis que $var['index'] = "toto", il va s'il le faut créer l'array et pousser les données dans l'index demandé. Si en ligne suivante tu demandes $var = "toto", il va requalifier la variable en tant que chaîne de caractère.
Le typage dynamique est à mon sens une force et une faiblesse de PHP. Cette façon d'accepter tout et n'importe quoi dans les variables ne doit fonctionner qu'avec les attributions (encore que... == et ===...). Ce warning est un moyen de te rappeler que, si tu as le contrôle sur ce que tu veux faire de tes variables, à ce niveau ton code n'est plus cohérent (une comparaison sur une valeur inexistante).

« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »
— Legion, geth trolleur à portée galactique