`
dengbaoleng
  • 浏览: 1131577 次
文章分类
社区版块
存档分类
最新评论

PHP内核函数研究之 intval

 
阅读更多

声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。
欢迎转载,转载请注明出处 。
本文地址:http://imsiren.com/archives/520

趁热打铁 顺便说说 intval函数.该函数好像我们用的最多的就是在POST或者GET某个参数的时候,将其强制转换为int型,

为了保证我们传入到SQL的时候是一个整形.,当然这只是其中一种用法..
该函数接受两个参数,第一个是要转换的字符串,第二个要转换成的进制数,默认为十进制.

我们先用PHP 来看看它的用法.


OK,看看它的定义.
同样定义在ext/standard/type.c文件中.


该函数会根据我们传递过来的参数个数进行不同的处理.第二个参数是要转换成的进制数,如果为空默认为10进制.
最后会调用 convert_to_long_base(return_value, base);来对我们输入过来的数据进行处理
该函数定义在Zend/zend_operators.c中


该函数首先获取类型,在进行不同的处理
19行,如果是 IS_DOUBLE类型,则会进行强制转换# define zend_dval_to_lval(d) ((long) (d))
21-27行,会调用 C函数 strtol将其转换成long类型
29-33行,如果是数组类型,会获取数组的个数,如果有值则将其设置为1,否则为0.这就是我们数组里有N个键和值,为什么返回还是1的原因:
不管 数组键值有多少个,只要有值,就为1.
34-49行,如果是对象呢,那就会先调用convert_to_long其强制转换为long,否则抛出异常,返回1.
如果没有返回类型则会返回0.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics