isset和is_null的功能几乎完全相反的一样..

是不是isset就是一个is_null的相反的别名?

诶, 要说区别, 那还真的是很多~

一切的不同都是因为: is_null是函数, isset是语句.

isset是语句, 和echo, print一样, 是PHP本身的一种语言结构.

而is_null是函数, 和我们一般的函数一样, 可以做为可变函数调用.

你也许会说, 好了,好了,我知道函数和语句的区别, 但到底是TMD什么区别?

诶, 所谓语句,语言结构, 就是说, 是语言本身支持的语句, 标识符.

比如, for, foreach, continue 等等, 它们在语法分析的时刻就被”抹掉”(逻辑上替代了)了.

让我们看看isset这个语句在语法分析的过程中, 是如何被”抹掉”的.

1. 首先, 在词法分析的时候, isset会被识别为T_ISSET标识符.2. 而在语法分析阶段, isset($var)这个指令, 会被分析成一条Opcode:ZEND_ISSET_ISEMPTY_VARS.

你可以理解isset就想C语言里面的宏, 在编译/执行之前已经被展开了.

因为这个, 所以在表现上, 会有如下的不同:

因为is_null是函数, 所以它可以通过如下方式调用:

$var = NULL;$func = "is_null";$func($var);?>

而, isset因为是语句, 所以不能这样调用.

因为is_null是函数, 所以它可以接受函数返回值做为参数, 而isset不行(当然, 如果PHP想支持, 其实也是可以的, 只不过就要增加编译阶段的复杂度了):

is_null(intval("0x45"));//OKisset(intval("0x45"));//PHP Fatal error: Can't use function return value in write contextis_null(NULL);//OKisset(NULL);//PHP Parse error: syntax error?>

说了这么多isset的缺点了, 说点它的优点吧:

因为isset是语句, 所以它快!

在一千万次的简单检测语句循环中, 对比结果如下:

$a="laruence":isset($a); //用时: 1.15165400505sis_null($a);//用时: 3.78501200676s?>

因为isset叫做isset, 所以它在检测未定义变量的时候, 不会产生NOTICE:

isset($laruence);//OKis_null($laruence);//PHP Notice: Undefined variable: laruence?>

那么, 对于什么时候用isset什么时候用is_null, 我有什么建议呢?

诶, 我的建议是, 用函数做函数应该做的事情~, 听起来象废话?

isset => is set? => 变量有没有被赋值(声明)

is_null => is null? => 变量为空么?

另外, 如果要用is_null, 我建议使用 “=== NULL” 来代替, 它不仅语义和is_null一致, 结果一致, 速度还和isset差不多:

在一千万次的简单检测语句循环中, 对比结果如下:

$a="laruence":isset($a); //用时: 1.15165400505sis_null($a);//用时: 3.78501200676s$a===NULL; //用时: 1.21655392647s?>

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

PHP ISThebestI是什么意思,php isset和is_null区别相关推荐

  1. PHP的empty,isset和is_null区别

    PHP提供了三个用于测试变量值的函数,分别是isset(),empty(),is_null(),他们都返回布尔值,但是也有区别. 通过以下表格查看: 对比项  isset()方法 empty()方法 ...

  2. php is_null(,PHP empty() isset() is_null() 区别与性能比较

    在php中empty() isset() is_null()三个函数都是判断是否为空的情况,但是如果我个要具体的深入去了解这个三个函数发现还是有许多的区别. is_null(), empty(), i ...

  3. php 空函数,PHP 中函数 isset(), empty(), is_null() 的区别

    PHP 中函数 isset(), empty(), is_null() 的区别, 使用 PHP 进行开发的时候,经常会用到 isset(), empty(), is_null() 这几个函数对数据进行 ...

  4. PHP isset()和empty()区别

    在PHP中isset()和empty()之间很容易混淆,它们都是用于测试变量的值,都返回一个布尔值.在使用 php 编写页面程序时,经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空, ...

  5. isset和empty以及is_null区别

    注:根据时长用到的,本篇着重isset和empty. 1.当变量未定义时,is_null()和"参数本身"是不允许作为参数判断的,会报Notice警告错误: 2.empty,iss ...

  6. null未定义_PHP的isset()、is_null、empty()使用总结

    php中文网最新课程 每日17点准时技术干货分享 这几个变量判断函数在PHP开发中用的其实挺多的,而且粗看上去都差不多,但其实还是有不少的区别的,如果搞不清楚,也许就会遗留一些潜在的bug, 包括我自 ...

  7. empty、isset和is_null的比较

    empty,isset首先都会检查变量是否存在,然后对变量值进行检测.而is_null 只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误! empty 如果 变量 是非空或非零的值, ...

  8. empty()、isset()、is_null()的区别

    总结: 1. 变量有二种状态: 已声明, 未声明 2. 已声明的变量也有二种状态: 已赋值(初始化), 未赋值(未初始化) 3. 变量可能会被赋值类型: null, 空值, 非空值 3.1: null ...

  9. isset()和empty()区别

    isset - 检测变量是否已设置并且非 NULL bool isset ( mixed $var [, mixed $... ] ) 检测变量是否设置,并且不是 NULL. 如果已经使用 unset ...

最新文章

  1. Navicat新建查询快捷键
  2. SwipeRefreshLayout 报错 dispatchTouchEvent
  3. 理解JavaScript的原始类型
  4. 【 C 】字符串函数专题
  5. 浅析人脸检测之Haar分类器方法
  6. string和json转换的简单应用
  7. 芯片-模组-开发板-软件开发包SDK(Software Development Kit)的关系(软件开发人员必须了解的硬件知识)
  8. html5图像不停旋转,html5 canvas多个图像旋转
  9. ef 多个左联接查询_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记...
  10. 谷歌将停止对32位Linux系统Chrome浏览器支持
  11. 【笔记】JavaScript高级篇——面向对象、原型、继承
  12. Unable to compile template. Check the Errors list for details 问题解决办法
  13. java记事本的代码_Java基础——第一个记事本代码与Java注释
  14. Java线程之线程的五种状态
  15. win10开卓越性能模式方法
  16. 基于Spire.PDF将HTML转换为PDF
  17. PS调出春夏外景婚纱照
  18. java的paypal支付demo_paypal支付demo
  19. FPGA通信第一篇--USB2.0
  20. pytorch中的value, top = prob.topk(1, dim=1, largest=True, sorted=True)

热门文章

  1. Java 做相关性分析
  2. 俏皮短信(zhuan)
  3. random函数汇总
  4. Warp:一款融资 23000000 美元,基于 Rust 开发、支持 GPU 加速的 21 世纪终端工具...
  5. setTimeout执行时间
  6. setTimeout函数
  7. java 副本_要单刷美赛副本了,会Java不会LaTeX怎么行?(1)
  8. 协方差公式性质证明过程_期望、方差、协方差及相关系数的基本运算
  9. 社会科学 有计算机吗,李建会/夏永红:宇宙是一个计算机吗?
  10. 修改第三方UI组件库样式的四种方法