A dynamic return type extension for filter_varwas recently added (#1900).
You can pass FILTER_NULL_ON_FAILURE to filter_var. In that case the function can also return null.
if (null !== $foo = filter_var($foo, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)) {
// ...
}