检查变量相关的函数
我们平常开发中, 如同 isset
这样检查是否存在的函数, 通常有三个: isset
, empty
, in_array
, array_key_exists
今天, 来尝试分析这三个函数各自的最佳使用场景, 并比较他们的效率
isset
isset
- 检测变量是否已声明并且值不为NULL
isset
其实是语句, 而非函数
和 echo
, print
一样, 是php本身的一种语言结构
比如, for, foreach, continue 等等, 它们在语法分析的时刻就被”抹掉”(逻辑上替代了)了.
让我们看看isset这个语句在语法分析的过程中, 是如何被”抹掉”的.
- 首先, 在词法分析的时候, isset会被识别为T_ISSET标识符.
- 而在语法分析阶段, isset($var)这个指令, 会被分析成一条Opcode:ZEND_ISSET_ISEMPTY_VARS.
你可以理解isset就想C语言里面的宏, 在编译/执行之前已经被展开了.
参考链接: isset和is_null的不同
empty
empty
其实与isset
相同, 也是语句
array_key_exists
in_array
比较效率
比较 isset、array_key_exists、in_array的效率
结果是 isset
> array_key_exists
> in_array
在有三万元素的情况下, in_array
的处理速度是8秒。
如果是严格模式的 in_array
, 时间减短为3秒多秒。
而 isset
和 array_key_exists
均为1秒左右。
在 in_array
中, 进行的是循环对数组遍历, 因而其所费的时间要多
isset
和 array_key_exists
是将变量认为是Hash进行判断, 因而所费时间极短