我读到isset()函数处理空字符串的某处TRUE,因此isset()不是从HTML表单验证文本输入和文本框的有效方法.
因此,您可以empty()用来检查用户输入的内容.
该isset()函数是否将空字符串视为TRUE?
那我应该在哪些情况下使用isset()?我应该总是!empty()用来检查是否有东西?
例如,而不是
if(isset($_GET['gender']))...
Run Code Online (Sandbox Code Playgroud)
用这个
if(!empty($_GET['gender']))...
Run Code Online (Sandbox Code Playgroud)
das*_*uki 123
FTA:
"isset()检查变量是否包含值(False,0或空字符串),但不是NULL.如果var存在则返回TRUE;否则返回FALSE.
另一方面,empty()函数检查变量是否为空值空字符串,0,NULL或False.如果var具有非空和非零值,则返回FALSE."
Pas*_*TIN 28
以最一般的方式:
回答问题1:
$str = '';
var_dump(isset($str));
Run Code Online (Sandbox Code Playgroud)
给
boolean true
Run Code Online (Sandbox Code Playgroud)
因为变量$str存在.
而问题2:
您应该使用isset来确定变量是否存在 ; 例如,如果您将某些数据作为数组获取,则可能需要检查该数组中是否存在键.
例如,
想想$_GET/ $_POST.
现在,要知道它的价值,当你知道有这样的价值时:那就是工作empty.
小智 12
检查有效输入也不是一个好方法.
isset() 是不够的,因为 - 正如已经指出的那样 - 它认为空字符串是有效值.! empty() 是不够的,因为它拒绝'0',这可能是一个有效的值.使用isset()与对空字符串相等性检查相结合的是,你需要验证传入的参数有没有产生假阴性值的最低限度:
if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
...
}
Run Code Online (Sandbox Code Playgroud)
但是,"最低限度",我的意思是.以上所有代码都确定是否存在某些值$_GET['gender'].它并没有确定的值是否$_GET['gender']是有效的(例如,一个).("Male", "Female","FileNotFound")
为此,请参阅Josh Davis的回答.
Gum*_*mbo 11
isset仅用于变量而不仅仅是值,因此isset("foobar")会引发错误.从PHP 5.5开始,empty支持变量和表达式.
所以你的第一个问题应该是if 对于包含空字符串的变量isset返回true.答案是:
$var = "";
var_dump(isset($var));
Run Code Online (Sandbox Code Playgroud)
PHP手册中的类型比较表对于这些问题非常方便.
isset基本上检查变量是否具有除null之外的任何值,因为不存在的变量始终为null.empty是一种反对的部分,isset但也将整数值0和字符串值"0"视为空.(再次,看一下类型比较表.)
如果您有$ _POST ['param']并假定它是字符串类型,则
isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'
Run Code Online (Sandbox Code Playgroud)
等同于
!empty($_POST['param'])
Run Code Online (Sandbox Code Playgroud)
何时以及如何使用:
True表示 0、1、空字符串、包含值的字符串、true、false
错误的未定义变量为 null
例如
$status = 0
if (isset($status)) // True
$status = null
if (isset($status)) // False
Run Code Online (Sandbox Code Playgroud)
1为False,为包含值的字符串,为true
True表示未定义值、null、空字符串、0、False 例如
$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
Run Code Online (Sandbox Code Playgroud)