PHP基础教程(21)PHP数据类型之特殊数据类型:PHP里的“幽灵变量”和“关系户”:NULL与资源类型的魔幻操作手册

第一章:欢迎来到PHP的“里世界”

伙计们,敲了这么久PHP代码,你是不是觉得数据类型就那么老几样?整数浮点字符串,数组对象布尔值,像超市货架上的可乐——整齐但无聊。今天咱们要撬开后台仓库的门,看看PHP私藏的两个“骚东西”:NULL类型资源类型

这俩货好比班级里的两个神秘同学:一个永远趴在桌上睡觉(NULL),老师点名时总回答“到不了”;另一个整天拿着不知道哪搞来的实验室钥匙(资源类型),神出鬼没。你平时可能没注意它们,但哪天它们闹起脾气,你的程序分分钟崩得亲妈都不认识。

先剧透个真实惨案:上周我隔壁工位的老王,就因为没处理好NULL,让公司订单系统凌晨两点给用户发了0元账单;前个月实习生小李用fopen()开了文件忘关闭,直接把服务器硬盘塞成了砖头。所以啊,今天这堂课,保命价值大于装逼价值。

第二章:NULL——变量界的“薛定谔的猫”

2.1 NULL的诞生:从虚无中来

NULL在PHP里是个奇葩的存在。它不是0(0是个正经数字),不是空字符串(空字符串好歹是个字符串),也不是false(false至少是个布尔值)。它就是nothing,是变量世界的真空状态。

// 实验室来了三只猫,只有一只是“薛定谔的猫”
$cat1 = 0;          // 这只是0猫
$cat2 = '';         // 这只是空猫
$cat3 = null;       // 这只是薛定谔的猫——你也不知道它是不是存在

var_dump($cat1);    // int(0) 
var_dump($cat2);    // string(0) ""
var_dump($cat3);    // NULL

看见没?PHP用大写NULL告诉你:这位爷跟那些妖艳贱货不一样。它连自己的数据类型都叫“NULL类型”。

2.2 NULL的三种存在形式

NULL一般以三种形态潜入你的代码:

形态一:主动赋值为NULL

$wallet = null;  // 我的钱包,空的,很干净
echo "钱包里有:" . $wallet;  // 输出个寂寞

形态二:变量被unset()后

$girlfriend = "小美";
unset($girlfriend);  // 分手了
var_dump($girlfriend);  // Notice: Undefined variable + 实际值是NULL

形态三:变量声明但未赋值

$homework;  // 声明了作业变量
var_dump($homework);  // NULL,作业?什么作业?
2.3 检测NULL的三种“抓鬼”方式

面对这个幽灵变量,PHP给了我们三副“阴阳眼镜”:

方式一:is_null()函数——专业抓鬼队

$ghost = null;
if (is_null($ghost)) {
    echo "抓到一只鬼!";  // 输出
}

方式二:=== null 严格比较——自带照妖镜

$something = 0;
if ($something === null) {
    echo "这是NULL";
} else {
    echo "这不是NULL,它是0";  // 输出这个
}

方式三:isset()的反面——鬼魂探测器

$var = null;
if (!isset($var)) {
    echo "这里没有实体变量";  // 输出
}
2.4 NULL的实战骚操作

场景一:数据库查询救场

// 用户没填手机号,数据库里就是NULL
$userPhone = getUserPhoneFromDB($userId);

// 错误示范(会导致短信接口报错):
// sendSMS($userPhone, "验证码:1234");

// 正确操作:
if (!is_null($userPhone)) {
    sendSMS($userPhone, "验证码:1234");
} else {
    log("用户{$userId}没留手机号,改发邮件吧");
}

场景二:函数返回值的“安全通道”

function findUser($username) {
    $user = queryDB("SELECT * FROM users WHERE name = '$username'");
    
    // 找不到就返回NULL,而不是返回false或空数组
    // 这样调用方不会混淆“找到了但没数据”和“根本没找到”
    return $user ?: null;  
}

$user = f
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值