在哪里使用isset()和!empty()
我在某处读到isset()
函数是空stringtesting为TRUE
,因为isset()
不是validationHTML表单中文本input和文本框的有效方法。
所以你可以使用empty()
来检查用户是否input了一些东西。
-
isset()
函数将空string视为TRUE
是TRUE
吗? -
那么在哪种情况下我应该使用
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。
以最一般的方式:
-
isset
testing是否存在variables(或数组的元素或对象的属性)(并且不为null) -
empty
testing,如果一个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总是值为null 。 empty
是isset
的计数器部分,但也将整数值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()是首选。
何时以及如何使用:
- 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 }