记一次php中使用中遇到的坑(isset和empty)

89 阅读1分钟

使用的是thinkphp的框架,由于项目比较小,在控制器中写接口的时候没有使用到validate校验器

然后我是直接这样写的

$token = $this->request->header('token');
$mode = $this->request->post('mode');
$question = $this->request->post('question');
if (!isset($code, $mode, $question)) {
xxx
}

isset的作用按原文档是这样说的

isset

(PHP 4, PHP 5, PHP 7, PHP 8)

isset — 检测变量是否已设置并且非 NULL

说明

isset ( mixed var[mixedvar [ mixed ... ] ) : bool

检测变量是否设置,并且不是 NULL。

如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。

如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置时返回 TRUE 计算过程从左至右,中途遇到没有设置的变量时就会立即停止

token=token = this->request->header("token"); 我这段代码如果不传就会返回一个""

空但不为NULL,

这样如果用户没有传这几个参数,这个检测也会失效

同时在empty中也会导致识别不到。

所以最稳妥的解决方案就是直接 !token!token || !code .... 直接取反可以有较好的效果