117

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

因此,您可以使用它empty()来检查用户是否输入了某些内容。

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

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

例如,而不是

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

使用这个

if(!empty($_GET['gender']))...
4

19 回答 19

147

isset 与 !empty

自由贸易协定:

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

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

于 2009-08-02T19:04:34.523 回答
37

以最一般的方式:

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


要回答问题 1

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

boolean true

因为变量$str存在。


问题2

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

现在,要研究它的价值,当你知道有这样一个价值时:那就是empty.

于 2009-08-02T19:06:24.017 回答
12

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

因此,您的第一个问题应该是是否为包含空字符串的变量isset返回true 。答案是:

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

PHP 手册中的类型比较表对于此类问题非常方便。

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

于 2009-08-02T19:12:45.640 回答
12

两者都不是检查有效输入的好方法。

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

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

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

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

为此,请参阅Josh Davis 的回答

于 2012-04-22T04:24:38.643 回答
8

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

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

等同于

!empty($_POST['param'])
于 2013-01-26T17:18:28.320 回答
4

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

您可以将其重写为“isset() 不是一种验证输入的方法”。要验证输入,请使用 PHP 的过滤器扩展filter_has_var()会告诉你变量是否存在,而filter_input()实际上会过滤和/或清理输入。

请注意,您不必使用filter_has_var()before filter_input(),如果您要求未设置的变量,filter_input()则只需 return null

于 2009-08-02T20:59:09.177 回答
4

何时以及如何使用:

  1. 伊塞特()

True for 0, 1, 空字符串, 包含值的字符串, true, false

为空为

例如

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. 空的

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

为空,空字符串,0,假例如

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
于 2017-05-14T07:18:17.107 回答
2

isset 用于确定是否存在某事物的实例,即是否已实例化变量...它与参数的值无关...

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

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

于 2014-06-13T12:04:14.667 回答
2

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

isset() 在变量不为空时返回真,而 Empty() 在变量为空字符串时返回真。

于 2018-05-17T15:23:00.567 回答
2

isset() vs empty() vs is_null()

在此处输入图像描述

于 2019-11-28T20:33:44.940 回答
1

使用empty就足够了:

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

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

于 2009-08-02T19:05:55.377 回答
1
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
于 2009-08-02T19:06:47.637 回答
1

我来这里是为了寻找一种快速的方法来检查变量中是否有任何内容。这里的答案都没有提供完整的解决方案,所以这里是:


检查输入是否为''或就足够了null,因为:

请求 URL.../test.php?var=结果$_GET['var'] = ''

请求 URL.../test.php结果$_GET['var'] = null


isset()false仅当变量存在且未设置为 时才返回null,因此如果使用它,您将获得true空字符串 ( '')。

empty()考虑两者null''空,但它也考虑'0'空,这在某些用例中是一个问题。

如果您想将'0'其视为空,请使用empty(). 否则使用以下检查:

$var .'' !== ''false仅对以下输入求值:

  • ''
  • null
  • false

我还使用以下检查过滤掉只有空格和换行符的字符串:

function hasContent($var){
    return trim($var .'') !== '';
}
于 2020-02-25T20:48:37.373 回答
0

我使用以下内容来避免通知,这将检查它是否在 GET 或 POST 上声明的 var 并使用 @ 前缀,您可以安全地检查是否不为空,如果未设置 var,则避免通知:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}
于 2017-08-07T18:08:56.093 回答
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

于 2018-07-10T11:40:47.890 回答
0

isset() 测试变量是否已设置且不为空:

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";
}
?>
于 2019-03-26T12:02:03.933 回答
0

!empty可以解决问题。如果您只需要检查数据是否存在,则使用isset other empty可以处理其他验证

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

于 2020-06-03T09:34:37.113 回答
0

请考虑行为可能会在不同的 PHP 版本上发生变化

从文档

isset() 如果 var 存在并且具有除 NULL 以外的任何值,则返回 TRUE。否则为 FALSE https://www.php.net/manual/en/function.isset.php

empty() 不存在或其值等于 FALSE https://www.php.net/manual/en/function.empty.php

(empty($x) == (!isset($x) || !$x)) // 返回 true;

(!empty($x) == (isset($x) && $x)) // 返回 true;

于 2020-11-13T02:56:14.180 回答
0

如有疑问,请使用这个来检查您的和 以理清与和Value之间的区别。issetempty

if(empty($yourVal)) {
  echo "YES empty - $yourVal"; // no result
}
if(!empty($yourVal)) {
  echo "<P>NOT !empty- $yourVal"; // result
}
if(isset($yourVal)) {
  echo "<P>YES isset - $yourVal";  // found yourVal, but result can still be none - yourVal is set without value
}
if(!isset($yourVal)) {
  echo "<P>NO !isset - $yourVal"; // $yourVal is not set, therefore no result
}
于 2021-10-16T00:05:56.857 回答