在使用 php 编写页面程序时,我常常使用变量处理函数推断 php 页面尾部參数的某个变量值是否为空,開始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。

顾名思义,empty() 推断一个变量是否为“空”,isset() 推断一个变量是否已经设置。

正是这样的所谓的“顾名思义”。令我開始时走了些弯路:当一个变量值等于0时。empty()也会成立(True),因而会发生一些意外。原来,empty() 和 isset() 尽管都是变量处理函数,它们都用来推断变量是否已经配置,它们却是有一定的差别empty还会检測变量是否为空、为零。

当一个变量值为0,empty()
觉得这个变量同等于空,即相当于没有设置。

比方检測 $id 变量。当 $id=0 时。用empty() 和 isset() 来检測变量 $id 是否已经配置。两都将返回不同的值—— empty() 觉得没有配置,isset() 可以取得 $id 的值:

 $id=0;

    empty($id)?

print "It's empty .":print "It's $id ."; 

      //结果:It's empty .

    print "<br>";

    !isset($id)?print "It's empty .":print "It's $id .";

      //结果:It's 0 .

这意味着。我们在使用变量处理函数时,当该变量可能出现0的值。使用 empty() 要小心,这个时候用 isset 代替它更明智一些。

当一个php页面的 URL 尾部參数出现 id=0 时(比方:test.php?

id=0)。试比較:

; - 若 id=0 ,id 也会为1

; - 若 id=0 。id 不会为1

可分开执行下面代码检測上述判断:

 ;

    print $id; // 得到 1



    ;

    print $id; //得到 0

  要说它们的联系,其共同点就是empty()和isset()都是变量处理函数。作用是推断变量是否已经配置,正是因为它们在处理变量过程中有非常大的相似性,才导致对它们的关系认识不足。单从empty()和isset()这两个函数本身来考虑的话会把人弄得更糊涂。换一个角度来它。empty()和isset()的处理对象无外乎,空字符串。

假设变量为0,则empty()会返回TRUE,isset()会返回TRUE。



假设变量为空字符串。则empty()会返回TRUE。isset()会返回TRUE;



假设变量没有定义,则empty()会返回TRUE。isset()会返回FLASE;



手冊中对empty()的解释例如以下:

描写叙述bool empty( mixed var )

假设 var 是非空或非零的值,则 empty() 返回 FALSE

换句话说,""、0、"0"、NULL、FALSE、array()、var
$var
; 以及没有不论什么属性的对象都将被觉得是空的。假设 var 为空,则返回 TRUE

手冊中对isset()的解释例如以下:

isset()检測变量是否设置

描写叙述bool isset ( mixed var [, mixed var [, ...]] )

假设 var 存在则返回 TRUE。否则返回 FALSE

假设已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 測试一个被设置成 NULL 的变量。将返回 FALSE

同一时候要注意的是一个 NULL 字节("\0")并不等同于
PHP 的 NULL 常数。

警告: isset() 仅仅能用于变量,由于传递不论什么其他參数都将造成解析错误。

若想检測常量是否已设置,可使用 defined()函数。

当要 推断一个变量是否已经声明的时候 能够使用 isset 函数

当要 推断一个变量是否已经赋予数据且不为空 能够用 empty 函数

当要 推断 一个变量 存在且不为空 先isset 函数 再用 empty 函数

php学习之道:php empty()和isset()的差别的更多相关文章

  1. empty 和isset的差别

    都可以判定一个变量是否为空:都返回boolean类型,即true或false.isset()用来检测变量是否设置,只能用于变量,因为传递任何其它参数都将造成解析错误.若想检测常量是否已设置,可使用 d ...

  2. [PHP源码阅读]empty和isset函数

    近日被问到PHP中empty和isset函数时怎么判断变量的,刚开始我是一脸懵逼的,因为我自己也只是一知半解,为了弄懂其真正的原理,赶紧翻开源码研究研究.经过分析可发现两个函数调用的都是同一个函数,因 ...

  3. empty和isset函数详解

    1.empty函数 用途:检测变量是否为空 若变量不存在则返回 TRUE 若变量存在且其值为"".0."0".NULL..FALSE.array().var $ ...

  4. php empty()和isset()的区别

    在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问 ...

  5. php部分---include()与require()的区别、empty()与isset is_null的区别与用法详解

    include()与require()的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间.他们最根本的区别在于错误处理的方式不一样. 1.处理错误的方式: require()一个文件存在错误的话 ...

  6. php中empty(), is_null(), isset()函数区别

    empty(), is_null(), isset()真值表(区别) 我们先来看看这3个函数的功能描述 www.111cn.net isset 判断变量是否已存在,如果变量存在则返回 TRUE,否则返 ...

  7. php empty()和isset()的区别<转载>

    在使用 php 编写页面程序时,我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空,开始的时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问 ...

  8. php empty和isset的区别

    通过一个例子来解释一下, $id = 0  empty($id) 的值是true isset($id) 也是true. empty 和isset 处理对象无外乎 未定义常量 .0 .空字符串 如果变量 ...

  9. php中empty()、isset()、is_null()和变量本身的布尔判断区别(转)

    在php脚本中,我们经常要去判断一个变量是否已定义或者是否为空,就需要用到这些函数empty().isset().is_null()和其本身作为参数,下面小段程序做个简要比较 <?php//预定 ...

随机推荐

  1. ScrollView+RadioGroup

    今天要分享一下关于动态添加RadioButton的东西: 要实现的效果就是,这个控件可以左右滑动,里面的按钮都是互斥的,类似RadioButton,我的第一反应就是用ScrollView+RadioG ...

  2. Django学习笔记(一)——安装,创建项目,配置

    疯狂的暑假学习之 Django学习笔记(一) 教材  书<The Django Book> 视频:csvt Django视频 1.创建项目 django‐admin.py startpro ...

  3. MapReduce编程之倒排索引

    任务要求: //输入文件格式 18661629496 110 13107702446 110 1234567 120 2345678 120 987654 110 2897839274 1866162 ...

  4. UVA 10593 Kites DP

    The season of flying kites is well ahead. So what? Let us make an inventory for kites. We are givena ...

  5. tensorflow利用预训练模型进行目标检测(二):预训练模型的使用

    一.运行样例 官网链接:https://github.com/tensorflow/models/blob/master/research/object_detection/object_detect ...

  6. [POJ 2279] Mr. Young's Picture Permutations

    [题目链接] http://poj.org/problem?id=2279 [算法] 杨氏矩阵与勾长公式 [代码] #include <algorithm> #include <bi ...

  7. MYSQL中 FIND_IN_SET 函数

    每天掌握一点,你的知识财富就多一点  今天在维护项目的时候发现了个MYSQL的FIND_IN_SET函数,之前接触太浅,今天又涨点知识了.下面是做个测试 1.创建一张test表,并添加数据 2.编写s ...

  8. maven、spring jdbc 与mysql

    做一个简单的有数据库的maven项目,目前还是没有前端,而且没有使用mybatis.之后会向项目中添加. 图片 对于上图的说明,第一个大的表格是未运行测试程序数据表的内容,第二个大的表格是运行测试程序 ...

  9. Spark Streaming概念学习系列之Spark Streaming的竞争对手

    不多说,直接上干货! Spark Streaming的竞争对手 Storm 在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology).这个拓扑将会被提交给集群,由集群中的 ...

  10. 手把手教你写带登录的NodeJS爬虫+数据展示

    其实在早之前,就做过立马理财的销售额统计,只不过是用前端js写的,需要在首页的console调试面板里粘贴一段代码执行,点击这里.主要是通过定时爬取https://www.lmlc.com/s/web ...