DevCN
菜单
全部文章快讯开发深度热点

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 合法。分别检查失败和边界,而不是只使用普通正整数验证函数。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。