De ez félrevezető.
$a = '0';
var_dump(empty($a), empty($b));Ez két TRUE lesz, pedig az $a az egy karakter hosszú sztring, de a boolean konverzió miatt FALSE lesz belőle.
Nem intiutív. Ilyen esetben érdemes inkább isset()-et használni (ha nem vagyunk bizosak benne, hogy az adott valami létezik). Vagy rendesen exception-t dobna...