在哪里使用isset()和!empty()

我在某处读到isset()函数是空stringtesting为TRUE ,因为isset()不是validationHTML表单中文本input和文本框的有效方法。

所以你可以使用empty()来检查用户是否input了一些东西。

  1. isset()函数将空string视为TRUETRUE吗?

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

例如,而不是

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

使用这个

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

isset vs.!空

FTA:

“isset()检查一个variables的值是否包含(False,0或者空string),但不是NULL,如果var存在则返回TRUE;否则返回FALSE。

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

以最一般的方式:

  • issettesting是否存在variables(或数组的元素或对象的属性)(并且不为null)
  • emptytesting,如果一个variables(…)包含一些非空的数据。

回答问题1

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

 boolean true 

因为variables$str存在。

问题2

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

现在,为了努力工作,当你知道有这样的价值时,那就是empty的工作。

isset仅用于variables而不仅仅是值,所以isset("foobar")会引发错误。 从PHP 5.5开始, empty支持variables和expression式。

因此,如果isset对于包含空string的variables返回true ,则应该是第一个问题。 答案是:

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

PHP手册中的types比较表对于这样的问题非常方便。

isset基本上检查一个variables是否具有非null值,因为不存在的variables总是值为nullemptyisset的计数器部分,但也将整数值0和string值"0"视为空。 (再次看看types比较表 )

这两种方法都不是检查有效input的好方法。

  • isset()是不够的,因为 – 如前所述 – 它认为一个空string是一个有效的值。
  • ! empty() ! empty()是不够的,因为它拒绝了'0',这可能是一个有效的值。

使用isset()与空string的等式检查相结合是最低限度的,你需要validation传入的参数有一个值,而不会产生错误的否定:

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

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

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

使用empty就够了:

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

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

isset()不是从HTML表单validation文本input和文本框的有效方法

你可以将其重写为“isset()不是validationinput的方法”。 要validationinput,请使用PHP的filter扩展 。 filter_has_var()会告诉你variables是否存在,而filter_input()实际上会过滤和/或清理input。

请注意,您不必在filter_input() filter_has_var()之前使用filter_has_var() ,并且如果您要求未设置的variables,则filter_input()将简单地返回null

如果你有一个$ _POST ['param'],并假设它是stringtypes那么

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

是相同的

 !empty($_POST['param']) 
 isset($variable) === (@$variable !== null) empty($variable) === (@$variable == false) 

isset用于确定某个事物的实例是否存在,即是否已经实例化一个variables…它不关心参数的值…

Pascal MARTIN … +1 …

如果variables不存在,则empty()不会生成警告。因此,当您打算修改variables时,如果testingvariables的存在,则isset()是首选。

何时以及如何使用:

  1. isset()函数

对于0,1是空string,包含值true,false的string

为null

例如

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

为1,一个包含值为true的string

True为空,空string为0,false为例

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

我使用以下方法来避免通知,这会检查是否在GET或POST上声明了var,并使用@前缀可以安全地检查是否为空,并避免在未设置var的情况下发出通知:

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