php 中 isset(user_input) 的替代方法

Alternative to isset(user_input) in php

我想知道除了(显而易见的选择)isset() 之外,是否还有另一种方法来检查来自用户输入的变量是否已设置且不为空。 在某些情况下,我们可能不是使用 $_POST 来获取值,而是使用一些类似的自定义函数。 isset() 不能用于函数调用的结果,因此必须采用另一种方法来执行相同的检查。现在,isset() 验证两件事:

  1. 是否设置了值。
  2. 该值是否为空。但是,为变量分配空值 ( $variable = NULL; ) 与由于输入字段为空而获得空值之间存在一些差异。或者至少我是这样读的。

那么,有没有一种不使用 isset() 来检查这两个要求的好方法?

我在大多数情况下都是这样做的:

$v = my_func();
if (isset($v) and $v) {
 ...
}

最好的方法是 isset 但如果您坚持...尝试 empty()strlen() 函数来检查它是否为空或字符串长度是否大于这么多字符。 strlen() returns 一个数字,传递给它的变量的长度。 empty() 检查它是否有字符或者它是否为空。使用 empty() 你必须小心,因为某些函数 return 0false 不被认为是空的。

if(!empty($var))....

if(strlen($var)>2)...

您也可以使用 !empty() 代替 isset() 函数 !empty() 适用于 isset() 并检查任何字符串的值是否不为 null、0 或任何空字符串。 每当我需要比较变量的存在性或它的值时,我通常更喜欢 !empty()

函数 return 值的 isset($var) 等价于 func() === null.

isset 基本上做一个 !== null 比较,如果测试变量不存在则不会抛出错误。这是函数 return 值的 non-issue,因为 a) 函数必须存在(否则 PHP 将退出并出现致命错误)和 b) 函数 always return 的东西,至少 null。所以你真正需要做的就是检查 null,不需要 isset

我在这里写了很多关于这个的文章:The Definitive Guide To PHP's isset And empty


除此之外,这取决于您要检查的具体内容:

  • 测试密钥是否通过 GET/POST 提交:isset($_POST['key'])
  • 测试是否有值,是否没有== false!empty($_POST['key'])
  • 测试它是否是 non-empty 字符串:isset($_POST['key']) && strlen($_POST['key'])
  • 可能更复杂的验证:filter_input