En fait ce n'est pas un transtypage ou autre de $row en array(), car si on cast $row -> on a une belle erreur.
Donc, en fait il interprète $row["champ"] comme $row[0], c'est à dire non plus comme un tableau mais comme une partie de la variable.
Exemple:
<?php
error_reporting(-1);
$row = 'abc';
echo $row["champ"]; // retourne: a
var_dump($row["champ"]); // retourne: string(1) 'a'
echo $row[0]; // retourne: a
var_dump($row[0]); // retourne: string(1) 'a'
?>
Aucune erreur, que ce soit: true, false, null, Int, String.(enfin je crois)
Car il ne l'interprète pas comme un tableau.
Et donc comme une partie de false -> qui est donc égale à null