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

问题描述 投票:82回答:14

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

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

  1. isset()函数将空字符串视为TRUE是真的吗?
  2. 那么我应该在哪些情况下使用isset()?我应该总是使用!empty()来检查是否有什么东西?

例如,而不是

if(isset($_GET['gender']))...

用这个

if(!empty($_GET['gender']))...
php isset
14个回答
107
投票

isset vs. !empty

FTA:

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

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


1
投票
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)

0
投票

我使用以下代码来避免通知,这会检查它是否在GET或POST上声明了var,并且使用@前缀可以安全地检查是否为空,并且如果未设置var则避免通知:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}

0
投票

isset()用于检查变量是否设置了值,而Empty()用于检查给定变量是否为空。

当变量不为null时,isset()返回true,而如果变量是空字符串,则Empty()返回true。


0
投票
    $var = '';
// Evaluates to true because $var is empty
if ( empty($var) ) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if ( isset($var) ) {
 echo '$var is set even though it is empty';
    }

资料来源:Php.net


0
投票

isset()测试是否设置了一个变量而不是null:

http://us.php.net/manual/en/function.isset.php

当变量设置为某些值时,empty()可以返回true:

http://us.php.net/manual/en/function.empty.php

<?php

$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>

27
投票

以最一般的方式:

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

回答问题1:

$str = '';
var_dump(isset($str));

boolean true

因为变量$str存在。

问题2:

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

现在,为了研究它的价值,当你知道有这样的价值时:那就是empty的工作。


11
投票

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

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

使用isset()结合对空字符串的相等性检查是验证传入参数是否具有值而不创建错误否定所需的最低要求:

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

但是,“最低限度”,我的意思是。以上所有代码都确定$_GET['gender']是否有值。它不确定$_GET['gender']的值是否有效(例如,("Male", "Female","FileNotFound")之一)。

为此,请参阅Josh Davis's answer


11
投票

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

所以你的第一个问题应该是,如果isset为包含空字符串的变量返回true。答案是:

$var = "";
var_dump(isset($var));

PHP手册中的type comparison tables对于这些问题非常方便。

isset基本上检查变量是否具有除null之外的任何值,因为不存在的变量始终为null。 emptyisset相反,但也将整数值0和字符串值"0"视为空。 (再次,看看type comparison tables。)


5
投票

如果你有$ _POST ['param']并假设它是字符串类型

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

是完全相同的

!empty($_POST['param'])

4
投票

isset()不是从HTML表单验证文本输入和文本框的有效方法

您可以重写,因为“isset()不是验证输入的方法。”要验证输入,请使用PHP的filter extensionfilter_has_var()将告诉您变量是否存在,而filter_input()将实际过滤和/或消毒输入。

请注意,您不必在filter_has_var()之前使用filter_input(),如果您要求未设置的变量,filter_input()将只返回null


2
投票

isset用于确定某个实例是否存在,如果某个变量已被实例化...它不关心参数的值...

帕斯卡马丁...... +1 ......

如果变量不存在,则empty()不会生成警告...因此,当您打算修改变量时,在测试变量是否存在时,首选isset()...


2
投票

何时以及如何使用:

  1. 出()

对于0,1,空字符串为True,包含值true,false的字符串

空为假

e.g

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False

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

对于null为空,空字符串为0,为false

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False

1
投票

使用empty就足够了:

if(!empty($variable)){
    // Do stuff
}

此外,如果你想要一个整数值,也可能值得检查intval($variable) !== FALSE

© www.soinside.com 2019 - 2024. All rights reserved.