Creo que necesitas estudiar un poco de tipos básicos, conversión dinámica de tipos y valores por defecto.
El cero evalúa siempre como false, de modo que la comparación deberías hacerla mas estricta.
Código PHP:
$foo = is_numeric($bar) ? $bar : 'valor por defecto';
En dado caso que $bar sea cero, se asigna correctamente el valor, pues la comparación es numérica.
Pero si haces esto, seguro no funciona:
Código PHP:
$foo = $bar or die('¿$bar es un numero, no existe o esta vacio?');