我应该在哪里使用isset()和!empty()

shi*_*hin 95 php isset

我读到isset()函数处理空字符串的某处TRUE,因此isset()不是从HTML表单验证文本输入和文本框的有效方法.

因此,您可以empty()用来检查用户输入的内容.

  1. isset()函数是否将空字符串视为TRUE

  2. 那我应该在哪些情况下使用isset()?我应该总是!empty()用来检查是否有东西?

例如,而不是

if(isset($_GET['gender']))...
Run Code Online (Sandbox Code Playgroud)

用这个

if(!empty($_GET['gender']))...
Run Code Online (Sandbox Code Playgroud)

das*_*uki 123

isset vs.!空

FTA:

"isset()检查变量是否包含值(False,0或空字符串),但不是NULL.如果var存在则返回TRUE;否则返回FALSE.

另一方面,empty()函数检查变量是否为空值空字符串,0,NULL或False.如果var具有非空和非零值,则返回FALSE."

  • FTA:来自文章 (41认同)
  • 对于一个空数组,`empty()`也返回true。 (5认同)

Pas*_*TIN 28

以最一般的方式:

  • isset测试变量(或数组的元素或对象的属性)是否存在(并且不为null)
  • empty 测试变量(...)是否包含一些非空数据.


回答问题1:

$str = '';
var_dump(isset($str));
Run Code Online (Sandbox Code Playgroud)

boolean true
Run Code Online (Sandbox Code Playgroud)

因为变量$str存在.


问题2:

您应该使用isset来确定变量是否存在 ; 例如,如果您将某些数据作为数组获取,则可能需要检查该数组中是否存在键. 例如,
想想$_GET/ $_POST.

现在,要知道它的价值,当你知道有这样的价值时:那就是工作empty.


小智 12

检查有效输入也不是一个好方法.

  • isset() 是不够的,因为 - 正如已经指出的那样 - 它认为空字符串是有效值.
  • ! empty() 是不够的,因为它拒绝'0',这可能是一个有效的值.

使用isset()与对空字符串相等性检查相结合的是,你需要验证传入的参数有没有产生假阴性值的最低限度:

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是,"最低限度",我的意思是.以上所有代码都确定是否存在某些值$_GET['gender'].它并没有确定的值是否$_GET['gender']有效的(例如,一个).("Male", "Female","FileNotFound")

为此,请参阅Josh Davis的回答.

  • 由于您使用的是松散比较,因此在处理零/错误的非字符串值时,您建议的代码片段将给出误报。https://3v4l.org/aIWqA (2认同)

Gum*_*mbo 11

isset仅用于变量而不仅仅是值,因此isset("foobar")会引发错误.从PHP 5.5开始,empty支持变量和表达式.

所以你的第一个问题应该是if 对于包含空字符串的变量isset返回true.答案是:

$var = "";
var_dump(isset($var));
Run Code Online (Sandbox Code Playgroud)

PHP手册中的类型比较表对于这些问题非常方便.

isset基本上检查变量是否具有除null之外的任何值,因为不存在的变量始终为null.empty是一种反对的部分,isset但也将整数值0和字符串值"0"视为空.(再次,看一下类型比较表.)


mac*_*Jun 6

如果您有$ _POST ['param']并假定它是字符串类型,则

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'
Run Code Online (Sandbox Code Playgroud)

等同于

!empty($_POST['param'])
Run Code Online (Sandbox Code Playgroud)


Fou*_*SSI 6

isset() 与empty() 与is_null()

在此输入图像描述


Fok*_*est 5

何时以及如何使用:

  1. 伊塞特()

True表示 0、1、空字符串、包含值的字符串、true、false

错误的未定义变量为 null

例如

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
Run Code Online (Sandbox Code Playgroud)
  1. 空的

1为False,为包含值的字符串,为true

True表示未定义值、null、空字符串、0、False 例如

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
Run Code Online (Sandbox Code Playgroud)