|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
培训的第二阶段,开始了PHP语言语法结构和应用的学习。 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
?>
小试一下身手,大概是没问题了,那么交给你个任务,做个留言本吧,这和HELLO WORLD有一比啊!^_^,同是新手面临的第一道关。 |
|