intVal($str) 跟 (int) $str 都是把其他类型的变量转化为int型变量的方式,这么多年来我一直森森滴怀疑它们的运算结果在某些条件下会有区别。对于我的疑问,文档里也没有多说(或者我没找到),还是做个实验验证一下吧。

除了intVal函数的第二个参数可以指定$str字符串的进制形式外,对于普通的10进制数字型字符,这两种方式有什么样的区别呢?

小实验:

$arr = array(
'$a' => 19,
'$b' => 19.99,
'$c' => '19.99',
'$d' => '',
'$d' => 'sfsdf',
'$f' => '0x20',
'$e' => array('19.99')
); foreach ($arr as $k => $v){
$v = intval($v);
echo "intval({$v}) is :" , var_dump($v) , PHP_EOL;
}
echo '-----------------------', PHP_EOL;
foreach ($arr as $k => $v){
$v = (int)($v);
echo "intval({$v}) is :" , var_dump($v) , PHP_EOL;
}
die();

输出结果:

intval(19) is :int(19)

intval(19) is :int(19)

intval(19) is :int(19)

intval(0) is :int(0)

intval(0) is :int(0)

intval(1) is :int(1)

-----------------------
intval(19) is :int(19) intval(19) is :int(19) intval(19) is :int(19) intval(0) is :int(0) intval(0) is :int(0) intval(1) is :int(1)

实验分析:输出的结果有两个值得注意的地方,第一,他们的结果完全一致;第二,非空会被转化为1,空会被转为0。

实验结论:

输出结果没啥区别,但intval()毕竟是要有函数调用的,所以相比较而言会慢那么一丢丢。

课外题:

$v = intval($v);

改成

$v = intval($v * 100);

试一下,会有什么惊喜?!

另外,举一反三,其他的类型转换方式会不会有相同的答案呢?试一下吧!

刨根问底儿 -- intVal($str) 跟 (int) $str 的运算结果有什么区别的更多相关文章

  1. char str[]和char *str的区别

    1.http://blog.csdn.net/szchtx/article/details/10396149 char ss[]="C++";  ss[0]='c';        ...

  2. 【转】char *str 和 char str[]的区别

    char str[] = "abcd";定义了一个局部字符数组,返回它的地址肯定是一个已经释放了的空间的地址. 此函数返回的是内部一个局部字符数组str的地址,且函数调用完毕后 此 ...

  3. char str[] 与 char *str的区别详细解析

    char* get_str(void) { char str[] = {"abcd"}; return str; } char str[] = {"abcd"} ...

  4. 290.单词模式。给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式。(c++方法)

    题目描述: 给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之 ...

  5. java 去最后一位字符 str.substring(0,str.length()-1)

    String str = " 中国, 美国 , 意大利 ";String[] arr = str.split(",");for(int i1 =0;i1< ...

  6. Python:str.ljust()、str.rjust()、str.center()函数

    str.ljust().str.rjust().str.center()函数 功能:调整字符串站位宽度,并确定字符串对齐方式: #可以用其它字符填充字符: #字符串长度 = 字符串个数(包含空格.标点 ...

  7. 由 var str = 'hello world' str.attr ='666'; 到包装类型

    近期有些小伙伴在公司的一道面试题踩了坑,  今天特地跟大家一起分享下: 原题如下: var str = 'hello world'; str.attr = '666'; console.log(str ...

  8. 给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换)

    需求:给定一个字符串str,将str中连续两个字符为a的字符替换为b(一个或连续超过多个字符a则不替换) 如: a 不替换 b 不替换  ab 不替换 ba 不替换 aba 不替换  aab 替换为 ...

  9. 有一个树形结构,实现一个方法getKeys(data,str),获取字符串str在data中的所有上级节点的名称

    有一个树形结构,实现一个方法getKeys(data,str);获取字符串str在data中的所有上级节点的名称,例如: getKeys(data,'str1') 返回 ‘key1' getKeys( ...

随机推荐

  1. 清除css、javascript及背景图在浏览器中的缓存

    在实际项目开发过过程中,页面是上传到服务器上的.而为了减少服务器的压力,让用户少加载,浏览器会将图片.css.js缓存到本地中,以便下次访问网站时使用.这样做不仅减少了服务器的压力,并且也减少了用户的 ...

  2. div、ul、li等无法居中问题,text-align无效 margin auto无效

    很简单.如果是div,直接把div换成: <table align="center">        <tr>            <td> ...

  3. Unity3d在线游戏Socket通讯

    网络游戏是一个人的互动娱乐软件应用.因为它是交互式,当然,需要了解对方的通信.这需要通信Socket:我们今天要实现的主角即套接字.Socket的英文原义是"孔"或"插座 ...

  4. 怎样在Upstart机制下的系统中加入upstart事件型的任务

    /*********************************************************************  * Author  : Samson  * Date   ...

  5. C# 通过扩展WebBrowser捕获网络连接错误信息

    想捕获WebBrowser连接指定网站过程中发生的错误信息,包括网络无法连接.404找不到网页等等错误!经过网上的搜集,找到了以下解决方案,该解决方案不会在网站连接前发出多余的测试请求. 向Webbr ...

  6. 编写Javascript类库(jQuery版

    编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章 Posted on 2014-11-13 09:29 lzhdim 阅读(653) 评论(1) 编辑 收藏 本系列文 ...

  7. JSON数据转换方法 parse()和stringify()

    将对象转换成JSON格式的文本数据 var str = JSON.stringify(data); 将对象转换成JSON对象的方法 var data = JSON.parse(str);

  8. Scala是一门现代的多范式编程语言

    Scala是一门现代的多范式编程语言 Scala是一门现代的多范式编程语言,志在以简练.优雅及类型安全的方式来表达常用编程模式.它平滑地集成了面向对象和函数语言的特性. Scala是面向对象的:Sca ...

  9. 基于EF+WCF的通用三层架构及解析

    分享基于EF+WCF的通用三层架构及解析 本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务 ...

  10. apache kafkac系列lient发展-java

    apache kafka区QQ群:162272557 1.依赖包 <dependency>             <groupId>org.apache.kafka</ ...