PHP 入门:严格检查分钟数并保留合法零值
通过 PHP 命令行解析文本时长,使用整数过滤器和严格比较区分失败与零,避免宽松转换将坏数据变成合法记录。
本节目标
通过 PHP 命令行解析文本时长,使用整数过滤器和严格比较区分失败与零,避免宽松转换将坏数据变成合法记录。
环境与运行方法
使用 PHP 8.2 或更新版本的命令行解释器。保存为 lesson.php,先执行 php -l lesson.php 检查语法,再运行 php lesson.php。代码不需要 Web 服务器。
核心思路
filter_var 的整数验证失败返回 false,而合法零返回整数 0,因此必须用 ===false 判断。示例还检查一天分钟数上限,并只接收字符串。
完整示例
<?php
declare(strict_types=1);
function minutes(string $text): ?int {
$value = filter_var($text, FILTER_VALIDATE_INT);
if ($value === false || $value < 0 || $value > 1440) return null;
return $value;
}
foreach (["30", "0", "12x", "1441"] as $text) {
$value = minutes($text);
echo $value === null ? "invalid\n" : "ok=$value\n";
}预期输出
ok=30
ok=0
invalid
invalid逐步理解
strict_types 让当前文件的标量参数调用更严格,但不会替函数进行业务范围校验。返回 ?int 表示整数或 null,调用者显式区分这两个分支。
本例不使用 intval 作为验证工具,因为转换与验证是不同职责。过滤器对数字文本的接受规则也不等于任意十进制字符串,例如前导零可能受到限制;导入之前应明确数据格式,不能在失败时直接删除字符凑出数字。
常见问题与边界
- 使用 ==false 会把合法零混为失败。
- 强制转换可能接受部分数字文本。
- PHP 源文件前不要放会意外输出的空白或 BOM,尤其是 Web 响应程序。
动手练习
增加空字符串、"-1" 和 "1440"。
参考答案
空字符串与负数失败,1440 合法。分别检查失败和边界,而不是只使用普通正整数验证函数。
文章回复
0 条公开回复