检查变量相关的函数

我们平常开发中, 如同 isset 这样检查是否存在的函数, 通常有三个: isset, empty, in_array, array_key_exists

今天, 来尝试分析这三个函数各自的最佳使用场景, 并比较他们的效率

isset

isset - 检测变量是否已声明并且值不为NULL

isset其实是语句, 而非函数

echo, print一样, 是php本身的一种语言结构

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

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

  1. 首先, 在词法分析的时候, isset会被识别为T_ISSET标识符.
  2. 而在语法分析阶段, 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秒多秒。

issetarray_key_exists 均为1秒左右。

in_array 中, 进行的是循环对数组遍历, 因而其所费的时间要多

issetarray_key_exists 是将变量认为是Hash进行判断, 因而所费时间极短