用 array_key_exists() 判断参数有没有传,再用严格比较区分 null、空字符串和 0。需要接收表单数字时,验证后用 === false 判断失败,以保留合法的零。
先区分没有传和传了空值
示例字段 limit 接受非负整数,也接受表单提交的整数字符串。保存为 limit.php。
<?php
function classifyLimit(array $input): string
{
if (!array_key_exists('limit', $input)) {
return 'missing';
}
$raw = $input['limit'];
if ($raw === null) {
return 'null';
}
if ($raw === '') {
return 'empty string';
}
if (!is_int($raw) && !is_string($raw)) {
return 'invalid';
}
$value = filter_var($raw, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 0],
]);
return $value === false ? 'invalid' : 'value=' . $value;
}
isset 会把缺键和 null 都判成 false。这里用 array_key_exists 保留两者的区别。
把数字零和字符串零放进测试
将以下代码追加到同一脚本。
立即学习“PHP免费学习笔记(深入)”;
foreach ([[], ['limit' => null], ['limit' => ''], ['limit' => 0],
['limit' => '0'], ['limit' => '4x']] as $input) {
echo classifyLimit($input), PHP_EOL;
}输出依次是 missing、null、empty string、value=0、value=0、invalid。
检查 empty() 为什么不适合这个场景
用 PHP CLI 对照布尔判断的结果。
var_dump(empty(''), empty('0'), empty(0));三个结果都为 true。因此需要保留零的接口,应该按参数约定逐项判断。



















