实例演示,PHP剖断变量是不是已存在

2019-09-25 20:35栏目:网络技术
TAG:

PHP函数:empty() 和 isset() 都以判别变量是不是已安插的函数,但是使用的时候依然存在一定的界别。

php中许多少人还不懂php中 0 , '' , nullfalse 之间的差异,那几个分化一时会影响到数量决断的正确性和安全性,给程序的测试运维变成众多烦劳。其余在面试题中也会蒙受那么些主题材料,如下:

 代码如下

empty() 函数用来测验变量是否早就布署。若变量已存在、非空字符串只怕非零,则赶回 false 值;反之再次来到 true。

<?php
    $str1 = null;
    $str2 = false;
    echo $str1==$str2 ? ‘相等’ : ‘不相等’;
    $str3 = "";
    $str4 = 0;
    echo $str3==$str4 ? ‘相等’ : ‘不相等’;
    $str5 = 0;
    $str6 = '0';
    echo $str5===$str6 ? ‘相等’ : ‘不相等’;
    $str7=0;
    $str=false;
    echo $str7==$str8 ? ‘相等’ : ‘不相等’;
?>
运行结果:
//相等,相等,不相等,相等。

<?php

isset() 函数用来测量试验变量是还是不是已经安插。若变量已存在则赶回 true 值。别的景况再次回到 false 值。

缘由是在PHP中变量是以C语言的结构体来存款和储蓄的,空字符串和NULL,false都是以值为0存款和储蓄的,个中那几个结构体有个zend_uchar type;那样的分子变量,他是用来保存变量的档案的次序的,而空字符串的等级次序是string,NULL的体系是NULL,false是boolean。

$test=0;

从地点七个函数的定义能够见到 empty() 和 isset() 的共同点是:都能够肯定多个变量是还是不是为空,都回去boolean类型,即true或false。而它们最引人瞩目有其余地点就是:再次来到的布尔值刚好是相反。

那一点足以用echo gettype('');和echo gettype(NULL);来打字与印刷看看!而===运算符是不单相比较值,还应该有相比类型的,所以第八个为false!

if($test==''){
 echo '<br />在php中,0即为空'; //被输出
}

别的,他们之间最大的差距正是对于0的剖断,若用empty决断会以为是空,用isset则以为不为空,举个例证:

别的再说下,php中 

if($test===''){
 echo '<br />在php中,0即为空'; //不被输出
}

<?php

= 二个等号是赋值

== 多少个等号是决断相等且只相比值,不相比类型

=== 八个等号是剖断值和品种都等于

!= 不对等符号,只相比值,不管项目

!== 不全等标识,相比值和项目

if($test==NULL){
 echo '<br />在php中,0即为空'; //被输出
}

          var $a=0;

进而能够如此说===是相等上边包车型客车函数:

if($test===NULL){
 echo '<br />在php中,0即为空'; //不被输出
}

           //empty($a)返回true

function eq($v1,$v2){
    if($v1 == $v2 && gettype($v1) == gettype($v2)){
        return 1;
    }else{
        return 0;
    }
}

if($test==false){
 echo '<br />在php中,0即为空'; //被输出
}

           if(empty($a)){

所以空字符串(''),false,NULL和0是值非常而项目差别等!

if($test===false){
 echo '<br />在php中,0即为空'; //不被输出
}

                 echo "判别结果是空"

瞩目:NULL是一种新鲜的类型.三种情况下为NULL。

  1. $var = NULL;
  2. $var;

3.""、0、"0"、NULL、FALSE、array()、var $var; 以及从未另外性质的目的都将被感到是空的,借使 var 为空,则赶回 TRUE。

?>

           }

小说参谋自:

缘由是在PHP中变量是以C语言的结构体来积存的,空字符串和NULL,false都以以值为0存储的,在这之中那么些结构体有个zend_uchar type;那样的积极分子变量,他是用来保存变量的种类的,而空字符串的类别是string,NULL的体系是NULL,false是boolean。

          //isset($a)返回true

这或多或少方可用echo gettype('');和echo gettype(NULL);来打字与印刷看看!而===运算符是不单相比较值,还应该有相比类型的,所以第一个为false!

           if(isset($a)){

之所以能够如此说===是特别上边包车型大巴函数:

                 echo "推断结果不是空"

 代码如下

           }
 ?>

function eq($v1, $v2) {
if($v1 == $v2 && gettype($v1) == gettype($v2)) {
return 1;
} else {
return 0;
}
}

empty() 判定二个变量是不是为“空”,同一时候还或然会检查评定变量是或不是为空、为零。当叁个变量值为0,empty() 感觉那些变量同等于空,即一定于尚未安装。而isset() 剖断四个变量是还是不是早就设置,尽管变量值为空,为零也算已安装。

进而空字符串(''),false,NULL和0是值十三分而项目不雷同!

一、比方表明

注意:

A.怎么着判定四个变量是还是不是定义?

NULL是一种特有的类型.

<?php
// 假诺不真实$test 变量
 
$isset = isset($test) ? "test is define!" : "test is undefine!";
echo "isset:$isset", '<br />';

三种状态下为NULL

$empty = !empty($test) ? "test is define!" : "test is undefine!";
echo "empty:$empty", '<br />';
 
$is_null = is_null($test) ? "test is define!" : "test is undefine!";
echo "is_澳门新葡亰平台游戏,null:$is_null";
测验结果是:

  1. $var = NULL;
  2. $var;
    3.""、0、"0"、NULL、FALSE、array()、var $var; 以及没有任何性质的指标都将被感到是空的,假诺 var 为空,则赶回 TRUE。

isset:test is undefine!
empty:test is undefine!
is_null:test is define!
结果申明: empty,isset首先都会检讨变量是不是存在,然后对变量值举行检验。而is_null 只是平昔检查变量值,是或不是为null,由此一旦变量未定义就能并发谬误!

总结

B、看下各自接收的参数是什么样?

澳门新葡亰平台官网,从地点实例大家得以看得出null,0,false是假,而''是三个空字符串并非空值。

isset函数参数:

<?php
$test=100;
echo isset($test),isset(100),$isset($b=100);
输出:

<br />
<b>Parse error</b>:  parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />
empty函数参数:

<?php
$test=100;
echo empty($test),empty(100),empty($b=100);
输出:

<br />
<b>Parse error</b>:  parse error, unexpected T_LNUMBER, expecting T_STRING or T_VARIABLE or '$' in <b>PHPDocument3</b> on line <b>3</b><br />
is_null函数参数:

<?php
$test=100;
echo is_null($test),is_null(100),is_null($b=100);
运转结果:没有别的错误。

结果注解: empty,isset输入参数必须是一个变量(PHP变量是以$字符发轫的),而is_null输入参数只若是能够有再次回到值就足以(常量,变量,表明式等)。在PHP手册里面,对于他们分析是:empty,isset 是一个言语结构而非函数,因而它无法被变量函数调用。

二、回顾总括isset,empty,is_null区别:

empty()

即便 变量 是非空或非零的值,则 empty() 重临FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var、未定义,以及未有别的性质的指标都将被以为是空的,要是 var 为空,则赶回 TRUE。

isset()

假使 变量 存在且值非NULL,则赶回 TRUE,不然重返FALSE(包蕴未定义)。变量值设置为:null,再次回到也是false;unset三个变量后,变量被吊销了。注意,isset对于NULL值变量,特殊管理。

is_null()

检验传入值【值,变量,表明式】是还是不是是null,唯有一个变量定义了,且它的值是 null ,它才回到TRUE . 另外都回到 FALSE 【未定义变量传入后会出错!】。

 

1、isset()对PHP参数判定

您能够应用 PHP isset() 来推断二个参数是还是不是被定义,注意如果该参数为空,大概"n"(NULL字节)使用 PHP isset() 剖断之后,都会为TRUE。

<?php
$var = ''; // 这里最先参数$var='';
$var0 = FALSE // 这里早先参数为布尔FALSE
$var2 = NULL;  // 这里定义$var2=NULL,用isset()推断再次回到FALSE
$var3 = ""; // 这里是NULL字节,用isset()判断,返回TRUE,不同于NULL常数
$var4 = "www.qianyunlai.com"; // 这里定义会在下边给unset掉

if (isset($var)) {
  echo '参数$var已经设定,且值不为NULL';
}
// 参数$var已经赋值,何况值为$var='',所以会输出“参数$var已经设定”

if (isset($var0)) {
  echo '参数$var0已经设定,且值不为NULL';
}
// 参数$var0已经赋值,何况值为$var=FALSE,所以会输出“参数$var已经设定”

if (isset($vget)) {
  echo '参数$vget已经设定,且值不为NULL';
}
// 参数$vget根本就平素不被聊到过,isset($vget)再次回到FALSE,不会输出

if (isset($var2)) {
  echo '参数$var2已经设定,且值不为NULL';
}
// 这里是$var2就算被设定了,不过$var2=NULL,所以isset($var2)重临FALSE,不会输出

if (isset($var3)) {
  echo '参数$var3已经设定,且值不为NULL';
}
// 参数$var3 虽然 就是意味着NULL字节,不过这些不是常数NULL,所以$isset("")返回TRUE,会输出

unset($var4); // 这里给$var4 释放掉了
if (isset($var4)) {
  echo '参数$var4已经设定,且值不为NULL';
}
// 就算最初已经定义$var4,并且还不为NULL,然则后来又给 unset() 掉了,所以不会输出。
?>
2、PHP isset() 对数组的论断

在采纳PHP数组的时候,要求判断数组的有些值是不是存在也得以行使 PHP isset() 函数。

<?php
$V => array(
  'aa' => 'www.qianyunlai.com',
  'bb' => array(
    'file' => 'file.qianyunlai.com',
    'img' => 'img.qianyunlai.com',
    'hosts' => array(
      'blog' => 'blog.qianyunlai.com',
      'res' => 'res.qianyunlai.com'
    )
  )
);

// var_dump用于出口TRUE 或 FALSE

var_dump(isset($V['aa']));
// 数组$V 的$V['aa'] ='www.qianyunlai.com'已经存在,所以输出TRUE

var_dump(isset($V['bb']['file']));
//$V['bb']['file'] = 'file.qianyunlai.com' 所以输出 TRUE

var_dump(isset($V['bb']['hosts']['blog']));
// $V['bb']['hosts']['blog']='blog.qianyunlai.com'所以输出TRUE

var_dump(isset($V['bb']['hosts']['sh']));
//根据数组,根本就未有设定该项,所以输出FALSE
?>
3、PHP isset()对参数判别

大多时候大家要求对三个参数进行判定,能够使用isset($A)&&isset($B)……来判断那一个参数是或不是都早就设定了,并且都不为NULL,对此您能够选取isset()多参数来判定是或不是都设定了。

<?php
isset($v1)&&isset($v2)&&isset($v3)……
// 等价于
isset($v1,$v2,$v3……)
?>
使用isset()剖断八个参数,须求有所参数都被设定,且不为NULL,只要当中有三个参数未有被设定过,只怕为NULL,那么任何isset()就为FALSE。

4、PHP isset()判断$_POST、$_GET、$_REQUEST等值

用isset() 也许empty() 判别通过表单传递来的参数是isset() 最遍布的用法。

if (isset($_POST['from']) && 'qianyunlai.com' == $_POST['from']) {
  echo '网址通过POST传递的来源是qianyunlai.com';
}
基于上边大家能够用isset推断多参数,在对表单传递来的值进行判定就最有助于了。

<?php
// 表单传递来user客商名和 pass必需同期设有手艺进行
if (isset($_POST['user'], $_POST['pass'])) {
  $user=$_POST['user'];
  $pass=$_POST['pass'];
  echo '您填写的客商名是:',$user,';密码是:',$pass;

}
?>
5、PHP isset($var{字符串长度}) 判别字符串长度

用PHP推断字符串是或不是存在恐怕推断字符串长度是还是不是超过某一数字依然判别字符串长度是或不是为空一般接纳strlen(),可是实际接纳isset()品质更优越。

<?php
// 三元,等同于 if (isset($_POST['from'])) { $var = $_POST['from'];} else {$weiget = '';}

$var = isset($_POST['from']) ? $_POST['from'] : '';

// 推断$var存在,且字符串长度大于0
/* 新手写法 
if (strlen($var) > 0) {
  echo '$var子符长度当先0';
}
*/

// 质量更优越的写法,判别$var第四个字符是还是不是设定了
if (isset($var{1})) {
  echo '$var字符长度超过0';
}
?>
6、PHP isset() 与 PHP empty() 的区别

十分多人都拿 PHP isset() 和 PHP empty()举行比较,可是得出的定论一般都以PHP isset() 判别那些参数是还是不是存在,且不为NULL,即利用 PHP isset() 剖断空值、0、布尔值(TRUE/FALSE)都以TRUE,並且 PHP isset() 还是能对数组进行剖断。

而 PHP empty(),若变量不设有,或许变量存在且其值为""、0、"0"、NULL、FALSE、array()、var $var; 以及从未别的性质的对象,则赶回 TURE。

那么!empty(),正是变量存在,且值不为""、0、"0"、NULL、FALSE、array()以及var $var;

<?php
// $_POST['from'] 传递来的是一个网站,据此我们得以知道,那么些值一定不为0和布尔,只好是字符串,大概空字符串,只怕不设有

/* 上边写法比较常见,可是需求推断一遍
if (isset($_POST['from']) && isset($_POST['from']{1})) {
  echo '$weigeti子符长度超越0';
}
*/

// 下面用!empty() 只要求看清一遍,尤其便捷
if (!empty($_POST['from'])) {
  echo '传递的from存在且不为空、0等';
}
?>
即便神跡用!empty()判定传递来的$_GET、$_POST 品质更优越,不过并非能完全替代isset()使用,如果传递的值允许包括0、'0'也许空的时候,就无法运用!empty()判别了,不然固然传递过来了0、'0'都会被视作没有传递任何值过来。

而对于能够规定传递过来的值一定不为0、'0'、空的时候,如客户名、密码等,使用!empty() 品质更优越。

 

补给:PHP 判定常量,变量和函数是不是存在

if (defined('CONST_NAME')) {
    //do something
}

变量检查测量检验则是应用isset,注意变量未证明或宣称时赋值为NULL,isset均重返FALSE,如:  

if (isset($var_name)) {
    //do something
}

函数检测用function_exists,注意待检查评定的函数名也亟需利用引号,如:

if (function_exists('fun_name')) {
 fun_name();
}  

<?php
/* 判别常量是或不是留存*/
if (defined('MYCONSTANT')) {
echo MYCONSTANT;
}
//判别变量是或不是留存
if (isset($myvar)) {
echo "存在变量$myvar.";
}
//判断函数是或不是存在
if (function_exists('imap_open')) {
echo "存在函数imag_openn";
} else {
echo "函数imag_open不存在n";
}
?>
 
function_exists判别函数是不是存在

<?php
if (function_exists('test_func')) {
    echo "函数test_func存在";
} else {
    echo "函数test_func不存在";
}
?>
 
filter_has_var函数
filter_has_var() 函数检查是或不是存在钦命输入类型的变量。
若成功,则赶回 true,不然重回 false。

<?php
if(!filter_has_var(INPUT_GET, "name"))
 {
 echo("Input type does not exist");
 }
else
 {
 echo("Input type exists");
 }
?> 

输出为. Input type exists

任何变量管理函数:
gettype:取得变量的连串。
intval:变量转成整数类型。
doubleval:变量转成倍浮点数类型。
empty:判别变量是还是不是已安顿。
is_array:决断变量类型是或不是为数组类型。
is_double:判别变量类型是还是不是为倍浮点数类型。
is_float:推断变量类型是或不是为浮点数类型。
is_int:判别变量类型是还是不是为整数门类。
is_integer:剖断变量类型是还是不是为长整数类型。
is_long:判别变量类型是还是不是为长整数类型。
is_object:剖断变量类型是不是为类品种。
is_real:判定变量类型是或不是为实数类型。
is_string:判别变量类型是还是不是为字符串类型。
isset:判断变量是不是已布置。
settype:配置变量类型。
strval:将变量转成字符串类型。
unset:删除变量。

版权声明:本文由澳门新葡亰平台游戏发布于网络技术,转载请注明出处:实例演示,PHP剖断变量是不是已存在