isset和is

  isset和is_null啥区别,

  看手册上讲的话, 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"));

  //OK

  isset(intval("0x45"));

  //PHP Fatal error: Can't use function return value in write context

  is_null(NULL);

  //OK

  isset(NULL);

  //PHP Parse error: syntax error

  ?>

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

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

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

  $a="laruence":

  isset($a); //用时: 1.15s

  is_null($a); //用时: 3.89s

  ?>

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

  isset($laruence);

  //OK

  is_null($laruence);

  //PHP Notice: Undefined variable: laruence

  ?>

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

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

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

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

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

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

  $a="laruence":

  isset($a); //用时: 1.15s

  is_null($a); //用时: 3.88s

  $a===NULL; //用时: 1.22s

  ?>

时间: 2024-11-23 06:57:45

isset和is的相关文章

isset 和empty 区别: php中is

s_null, empty, isset,unset 我们先来看看这4个函数的描述.isset判断变量是否已存在(配置)unset 把变量删除(释放)掉empty 判断变量是否为空is_null 判断变量是否为NULLok,已经开始搞人了.那么开始,这4个函数中除了unset,其他3个都是判断函数,unset首先出局,因为他不会搞错,其次是is_null,我们可以把它看成是!isset,是isset的一个逆操作,下面一张表可以很清楚的说明他们之间的关系:变量      empty    is_n

php is_null empty isset unset的区别

echo !isset(GET[′a′]); //如果得不到变量a的值echoempty(_GET['a']);  //如果变量a的值是空is_null, empty, isset, unset 我们先来看看这4个函数的描述. isset 判断变量是否已存在(配置) unset 把变量删除(释放)掉 empty 判断变量是否为空 is_null 判断变量是否为NULL ok,已经开始搞人了.那么开始,这4个函数中除了unset,其他 3个都是判断函数,unset首先出局,因为他不会搞错,其次是i

php isset empty 区别

empty 判断一个变量是否为"空",isset 判断一个变量是否已经设置.正是这种所谓的"顾名思义",令我开始时走了些弯路:当一个变量值等于0时,empty()也会成立(True),因而会发生一些意外.原来,empty 和 isset 虽然都是变量处理函数,它们都用来判断变量是否已经配置,它们却是有一定的区别:empty还会检测变量是否为空.为零.当一个变量值为0,empty  认为这个变量同等于空,即相当于没有设置. 比如检测 $id 变量,当 $id=0 时,

php empty,isset,is

一.举例说明 A.一个变量没有定义,我们该怎么样去判断呢 复制代码 代码如下: <?php #不存在$test 变量 $isset= isset($test)?"test is define!":"test is undefine!"; echo "isset:$isset\r\n"; $empty=!empty($test)?"test is define!":"test is undefine!"

PHP教程:isset() , unnset(), empty()

isset() , unnset(), empty() 是一个语言结构而非函数,因此它无法被变量函数调用. isset().empty() 只检测变量,检测任何非变量的东西都将导致解析错误.后边的语句是错误而且将不会起作用: empty(addslashes($name)). 若想检测常量是否已设置,可使用 defined() 函数.同时要注意的是一个 NULL 字节("\0″)并不等同于 PHP 的 NULL 常数.所以 isset(NULL)会发生语法错误. 像echo(),print(),

实例研究PHP函数isset和empty的区别

实例研究PHP函数isset()和empty()的区别   1  <? php error_reporting(E_ALL);  2  echo   ' <B>未定义$var</b><Br> ' ;  3  echo   " isset测试:<Br> " ;  4  if  ( isset ( $var ))  5 {  6      echo   ' 变量$var存在!<Br> '  ;  7 }  8    9   

PHP中isset与array

  本文实例讲述了PHP中isset与array_key_exists的区别.分享给大家供大家参考.具体分析如下: 1.对于数组值的判断不同,对于值为null或''或false,isset返回false,array_key_exists返回true; 2. 执行效率不同,isset是内建运算符,array_key_exists是php内置函数,isset要快一些.请参考:PHP 函数实现原理及性能分析 3.当用isset访问一个不存在索引数组值时,不会引起一个E_NOTICE的php错误消息;

PHP中isset()和unset()函数的用法小结

 本篇文章主要是对PHP中isset()和unset()函数的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 isset (PHP 3, PHP 4, PHP 5 )   isset -- 检测变量是否设置   描述 bool isset ( mixed var [, mixed var [, ...]]) 如果 var 存在则返回 TRUE,否则返回 FALSE.   如果已经使用 unset() 释放了一个变量之后,它将不再是 isset().若使用 isset() 测试

PHP函数中isset和array

  在判断某个 PHP 数组的索引值是否存在,一般会使用 isset 和 array_key_exists 两种方法. isset($a['key']) array_key_exists('key', $a) array_key_exists 确切地告诉你,数组是否存在某个键,而 isset 则只是返回键值是否为 null 的状态.也就是说,假设给定下面的数组: $a = array('key1' => '123', 'key2' => null); 使用这两个方法判断键值存在情况,结果如下: