Bueno, en el manual de empty() claramente dice que tipos de valores son entendidos como "vacíos", ¿o me equivoco?
Es normal que "0" sea igual a vacío, ¿pero qué pasaría si además comparas la longitud del valor?
Entonces "0" mide "1", y eso es un valor positivo.