我应该在哪里使用isset()和!empty()

2020/10/07 20:41 · php ·  · 0评论

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

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

  1. isset()函数将空字符串视为是真的TRUE吗?

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

例如代替

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

使用这个

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

isset vs.!empty

自由贸易协定:

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

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

以最一般的方式:

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


回答
问题1

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

boolean true

因为变量$str存在。


问题2

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

考虑$_GET/ $_POST

现在,要发挥其价值,当您知道存在这样的价值时:这就是工作empty

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

  • 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之外的任何值,因为不存在的变量始终具有值nullempty是计数器的一部分,isset但也将整数值0和字符串值"0"视为空。(再次,查看类型比较表。)

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

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

等同于

!empty($_POST['param'])

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

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

请注意,您不必filter_has_var()在之前使用filter_input(),如果您要求未设置的变量,则filter_input()只会返回null

何时以及如何使用:

  1. isset()

为0,1,空字符串,其中包含一个值的字符串,真,假

为空

例如

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

False表示1,一个包含值的字符串,true

True为null,空字符串,0,false,例如

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

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

Pascal MARTIN ... +1 ...

如果变量不存在,则empty()不会生成警告...因此,当您打算修改变量时测试是否存在变量时,最好使用isset()。

使用empty就足够了:

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

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

isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)

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


检查输入是否为''足够了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
}

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";
}
?>

isset()vs empty()vs is_null()

在此处输入图片说明

!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}

?>

本文地址:http://php.askforanswer.com/woyinggaizainalishiyongissetheempty.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!