【PHP开发900个实用技巧】21.isset(), empty(), null: PHP三大迷局的终极解密!

你以为你真的懂isset、empty和null?PHP新手必踩的三大天坑,老司机也可能翻车!揭秘变量判断背后的魔鬼细节,从此告别undefined报错噩梦!

isset(), empty(), null: PHP三大迷局的终极解密!
1. isset():你以为变量存在就安全了?
2. empty():这个函数比你想的更''贪婪''!
3. null:它到底是什么妖魔鬼怪?
4. 综合对比与最佳实践指南

目录:

  1. isset():你以为变量存在就安全了?
  2. empty():这个函数比你想的更“贪婪”!
  3. null:它到底是什么妖魔鬼怪?
  4. 综合对比与最佳实践指南

嗨,你好呀,我是你的老朋友精通代码大仙。接下来我们一起学习PHP开发中的900个实用技巧,震撼你的学习轨迹!获取更多学习资料请加威信:temu333 关注B占UP:技术学习

“代码不规范,同事两行泪。而变量判断不规范,bug排查到天亮泪两行!” 刚入行的你是不是经常在表单提交时被"undefined variable"啪啪打脸?今天咱们就掰开PHP变量判断三兄弟的脑壳,看看它们肚子里装的什么药!

1. isset():你以为变量存在就安全了?

点题:isset()表面是检查变量是否存在的老好人,暗地里却藏着小刀

痛点分析
新手总爱用isset()做表单验证:

// 危险操作示范!
if(isset($_POST['username'])) {
    $user = $_POST['username'];
    echo "欢迎,".$user;
}

但当用户输入username=0时直接沉默是金,表单提交空值照样过审!

解决方案/正确做法
isset()只检查变量钥匙是否存在,不关心保险箱里装的是什么:

// 双保险策略
if(isset($_POST['username']) && $_POST['username'] !== '') {
    // 此时0、false等有效值也能通过
    $user = trim($_POST['username']);
    if(strlen($user) > 3) {
        echo "合规用户名!";
    }
}

记得配合trim()剪掉用户手滑输入的空格符

小结:isset()是守门员不是裁判,永远记得给门加第二道锁!


2. empty():这个函数比你想的更“贪婪”!

点题:empty()就像贪吃蛇,连0和空字符串都吞!

痛点分析

// 注册功能翻车现场
if(empty($_POST['age'])) {
    die("年龄必须填写!");
}

用户输入0岁宝宝?直接拒绝访问!empty()把0、‘’、false、null全部当垃圾处理

解决方案/正确做法
特殊场景改用严格等于判断:

// 安全年龄检测
$age = $_POST['age'] ?? null; // 合并运算符保底

if($age === null || $age === '') {
    die("请填写有效年龄");
} elseif(!is_numeric($age)) {
    die("请输入数字");
}
// 此时0值可正常通过

用类型精准打击代替模糊判断

小结:empty()的饥饿程度超乎你想象,喂数据前先看食谱!


3. null:它到底是什么妖魔鬼怪?

点题:null不是0也不是空,它是变量世界的幽灵!

痛点分析

// 鬼畜操作三连
$var = null;
var_dump(isset($var));  // false
var_dump(empty($var));  // true 
var_dump(is_null($var));// true

开发常犯的错是把未赋值变量当null处理:

// 报错:Undefined variable
if(is_null($unsetVar)) {
    echo "这行永远不会执行!";
}

解决方案/正确做法
区分三种空状态:

// 安全的空值检测流程
function checkEmpty($val) {
    if(!isset($val)) return '未设置'; // 钥匙不存在
    if($val === null) return '空值';  // 钥匙存在但保险箱空
    if($val === '') return '空字符串'; 
    return '有值';
}

小结:null是薛定谔的猫,不打开盒子永远不知道生死!


4. 综合对比与最佳实践指南

点题:三大判官联合作战手册

终极对照表

值类型 isset() empty() is_null()
$var未声明 false true true
$var = null false true true
$var = 0 true true false
$var = ‘’ true true false
$var = false true true false
$var = [] true true false
$var = ‘0’ true true false
$var = ‘text’ true false false

表单处理黄金法则

// 防狼四件套
$username = $_POST['username'] ?? ''; // 默认值盾牌
$age = isset($_POST['age']) ? (int)$_POST['age'] : 0; // 类型盔甲

// 空值检测组合拳
if($username === ''){
    // 必须输入型字段
} 

// 允许0值的字段
if(!isset($_POST['quantity']) || $_POST['quantity'] === ''){
    // 真·未输入 
}

函数返回值建议

// 查找用户数据
function findUser($id){
    $user = db_query("SELECT * FROM users WHERE id=".$id);
    return $user ?: null; // 明确返回null表示不存在
}

// 调用方安全检测
if(($user = findUser(42)) === null) {
    // 处理用户不存在
}

小结:根据业务场景选兵器,表单验证要刀刀见血!


写在最后

变量判断就像写代码时的呼吸,你以为自然而然却暗藏致命陷阱。当isset遇上0,empty碰上null,无数深夜加班的血泪教会我们:基础不牢,地动山摇!但别怕,把今天的六大实战心法贴到显示器上,下次再见到“undefined”报警时,你一定能淡定地笑出声。记住:编程不是玄学,每一个小坑都是修炼大神的必经之路!

(悄悄说:写完这篇时我的isset检测函数又少了一个bug…)

你可能感兴趣的:(PHP开发900个实用技巧,php,android,开发语言,程序员创富)