设为首页 收藏本站
查看: 833|回复: 0

[经验分享] 原:PHP数组函数研究:is_null,is_object,is_array,is_string,is_resource等

[复制链接]

尚未签到

发表于 2017-4-13 12:51:54 | 显示全部楼层 |阅读模式
声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。
欢迎转载,转载请注明出处 。
本文地址:http://imsiren.com/archives/516


前面有一篇文章 讲的是PHP内核源码分析:isset与empty

但是好像忘记了一系列is函数

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_FUNCTION(is_null){php_is_type(INTERNAL_FUNCTION_PARAM_PASSTHRU, IS_NULL);}


  
它调用了 php_is_type函数,该函数 后面传递的是要检测的类型.

  
staticvoid php_is_type(INTERNAL_FUNCTION_PARAMETERS, inttype){zval **arg;if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &arg) == FAILURE) {RETURN_FALSE;}if(Z_TYPE_PP(arg) == type) {if(type == IS_OBJECT) {zend_class_entry *ce;if(Z_OBJ_HT_PP(arg)->get_class_entry == NULL) {/* if there's no get_class_entry it's not a PHP object, so it can't be INCOMPLETE_CLASS */RETURN_TRUE;}ce = Z_OBJCE_PP(arg);if(!strcmp(ce->name, INCOMPLETE_CLASS)) {RETURN_FALSE;}}if(type == IS_RESOURCE) {char*type_name;type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(arg) TSRMLS_CC);if(!type_name) {RETURN_FALSE;}}RETURN_TRUE;}else{RETURN_FALSE;}}




第九行 会调用 Z_TYPE_PP来获取传递进来的值的类型..前面文章有讲到.
如果不等于该函数的第二个参数type直接返回FALSE;
如果等于我们要检测的类型,但是 对象或者是资源 就还要做相应的判断.
是对象的话,十六行会获取 _zend_class_entry 结构的name值,该值必须等于INCOMPLETE_CLASS
INCOMPLETE_CLASS是一个宏,
#define INCOMPLETE_CLASS “__PHP_Incomplete_Class”
也就是说必须是一个类的实例化才行.

原文出处:http://imsiren.com/archives/516

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364512-1-1.html 上篇帖子: 适用于 PHP5.4的php_memcache.dll 下篇帖子: Jove:I am using a web messenger. Also on your mobile phone: http://www.ebuddy.co
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表