PHP数组is_*()对比和解析
- 2019 年 10 月 5 日
- 筆記
这篇篇文章 讲的是 PHP一系列is函数
is_array — 检测变量是否是数组
is_bool — 检测变量是否是布尔型
is_callable — 检测参数是否为合法的可调用结构
is_dir — 判断给定文件名是否是一个目录
is_double — is_float() 的别名
is_float — 检测变量是否是浮点型
is_file — 判断给定文件名是否为一个正常的文件
is_int — 检测变量是否是整数
is_null — 检测变量是否为 NULL
is_numeric — 检测变量是否为数字或数字字符串
is_object — 检测变量是否是一个对象
is_string — 检测变量是否是字符串
如is_null,is_object,is_array,is_string,is_resource,is_bool,is_long,is_float 今天补充一下..他们的判断方法是一样的,只讲一个is_null其他的就能明白了. is_null是一个函数.定义在 ext/standard/type.c文件中. 所有 类型的操作都在这个文件里,settype,gettype,intval等函数也在这里.
它调用了 php_is_type函数,该函数 后面传递的是要检测的类型.
第九行 会调用 Z_TYPE_PP来获取传递进来的值的类型..前面文章有讲到.
如果不等于该函数的第二个参数type直接返回FALSE; 如果等于我们要检测的类型,但是 对象或者是资源 就还要做相应的判断. 是对象的话,十六行会获取 _zend_class_entry 结构的name值,该值必须等于INCOMPLETE_CLASS INCOMPLETE_CLASS是一个宏, #define INCOMPLETE_CLASS “__PHP_Incomplete_Class” 也就是说必须是一个类的实例化才行.