Answers:
自由贸易协定:
“ isset()检查变量是否具有包含(False,0或空字符串)但不为NULL的值。如果var存在,则返回TRUE;否则返回FALSE。
另一方面,empty()函数检查变量是否具有空值,空字符串,0,NULL或False。如果var具有非空且非零值,则返回FALSE。”
empty()
对于空数组也返回true。
empty()
为0返回TRUE,在万一“ 0”偶然是一个字符串的情况下,使用此运算符进行数学运算也不是一个好主意。这可能很危险。相反,使用基本>
,<
和==
运营商和转换变量使用intval()
或floatval()
。
两种方法都不是检查有效输入的好方法。
isset()
这是不够的,因为(如前所述)它将空字符串视为有效值。! empty()
还不够,因为它拒绝可能为有效值的“ 0”。使用isset()
与对空字符串相等性检查相结合是最起码的,你需要验证传入的参数有没有产生假阴性值:
if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
...
}
但是,“最低限度”是我的意思。上面的代码所做的全部工作就是确定是否有的值$_GET['gender']
。它并没有确定的值是否$_GET['gender']
是有效的(例如,一个)。("Male", "Female",
"FileNotFound"
)
为此,请参见Josh Davis的答案。
isset
仅用于变量,而不仅用于值,因此isset("foobar")
会引发错误。从PHP 5.5开始,同时empty
支持变量和表达式。
因此,您的第一个问题应该是是否对包含空字符串的变量isset
返回true。答案是:
$var = "";
var_dump(isset($var));
该类型比较表PHP手册中对于此类问题非常方便。
isset
基本上检查变量是否具有除null之外的任何值,因为不存在的变量始终具有值null。empty
是计数器的一部分,isset
但也将整数值0
和字符串值"0"
视为空。(再次,查看类型比较表。)
empty()
从PHP 5.5.0开始,“ 还支持表达式,而不只是变量”。
isset()不是从HTML表单验证文本输入和文本框的有效方法
您可以将其重写为“ isset()不是验证输入的方法”。要验证输入,请使用PHP的过滤器扩展。filter_has_var()
将告诉您变量是否存在,而filter_input()
实际上将过滤和/或清除输入。
请注意,您不必filter_has_var()
在之前使用filter_input()
,如果您要求未设置的变量,则filter_input()
只会返回null
。
使用empty
就足够了:
if(!empty($variable)){
// Do stuff
}
另外,如果您想要一个整数值,也可能值得检查一下intval($variable) !== FALSE
。
empty
... isset
/ 则无效,filter_has_var
必须使用它来检查var是否存在。
我来这里是为了寻找一种快速的方法来检查变量中是否包含任何内容。这里没有答案提供完整的解决方案,所以这里是:
检查输入是否为''
或足够了null
,因为:
请求网址.../test.php?var=
结果$_GET['var'] = ''
请求网址.../test.php
结果$_GET['var'] = null
isset()
false
仅在变量存在且未设置为时返回null
,因此,如果使用它,则会得到true
空字符串(''
)。
empty()
同时考虑null
与''
空的,但它也认为'0'
空,这在一些使用情况的问题。
如果要'0'
视为空,请使用empty()
。否则,请使用以下检查:
$var .'' !== ''
计算结果为false
只对以下输入:
''
null
false
我使用以下检查也只过滤掉带有空格和换行符的字符串:
function hasContent($var){
return trim($var .'') !== '';
}
我使用以下方法来避免发出通知,这将检查是否在GET或POST上声明了该变量,并使用@前缀可以安全地检查是否不为空,并避免在未设置var的情况下发出通知:
if( isset($_GET['var']) && @$_GET['var']!='' ){
//Is not empty, do something
}
@
不应该鼓励使用“ stfu运算符”(),并且对于您的代码段来说也没有必要。这不是一个好答案。您正在做一个粗略的比较。您不妨使用!empty()
。
@
会给您带来调试方面的麻烦,页面影响会变慢,并且您error_log
一瞬间仍然可以拥有超过1GB的内存。只是聪明和使用!empty()
,!is_null()
或者类似的东西。
isset()用于检查变量是否设置了值,Empty()用于检查给定变量是否为空。
如果变量不为null,则isset()返回true;如果变量为空字符串,则Empty()返回true。
$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
isset()测试是否设置了变量并且不为null:
http://us.php.net/manual/zh/function.isset.php
当变量设置为某些值时,empty()可以返回true:
http://us.php.net/manual/zh/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";
}
?>
!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}
?>