php运算时默认的类型转换
php属于弱类型语言,使用数据时无需指定其数据类型。对于学C语言入门的我,刚刚接触时感觉很神奇,但是随之而来的也有烦恼。
总结一下php中默认的类型转换,按照运算符类型,只总结能够自动做类型转换的运算符,不能够转换的运算符在此不做罗列,关于运算符优先级,稍后会有单独的文章总结。
- [],数组下标
只要数组有一个字符串类型的键,其余键都转换成字符串;没有键,或者键都为数字,所有键转换成整形,浮点数只舍不入,无下标的键为前一个下标加1
/*所有键类型转换成字符串*/
$arr = array('wolf', 'a'=>'hippo', '1'=>'tiger', 1=>'panda', '20'=>'elephant', '02'=>'cock', '2.0'=>'dog', 3.3=>'pangolin');
var_dump($arr[02]);//null, 找$arr[02]即$arr[2]转换成$arr['2'],数组没有下标为'2'的元素
var_dump($arr['1']);//panda, 'tiger'和'panda'的下标都为'1',后者把前者覆盖
var_dump($arr[0]);//wolf, 'wolf'元素自动添加下标0,转换成'0'
var_dump($arr[a]);//hippo, $arr[a]转换成$arr['a']
var_dump($arr[3.3]);//pangolin, $arr[3.3]转换成$arr[3]转换成$arr['3']
var_dump($arr['3.3']);//null, $arr['3.3'],数组没有下标为'3.3'的元素
/*所有键类型转换成整形*/
$arr = array('apple', 1=>'litchi', 2=>'pear', 4.4=>'banana', 'orange');
var_dump($arr[02]);//pear, $arr[02]即$arr[2]
var_dump($arr['02']);//null, 数组没有下标为'02'的元素
var_dump($arr['0']);//apple, apple自动添加下标0
var_dump($arr[4]);//banana, $arr[4.4]转换成$arr[4]
var_dump($arr[5]);//organe, oragne自动添加下标5(4+1)
- ++/--,递增、递减
数字字符串转换成整形或者浮点型,转换后进行运算;非数字字符串最后一个字符对应的ASCII码做运算,类型不变。后一种情况时,只对递增运算符有效,递减运算符无效。
/*数字字符串转换成整形*/
$a = '108';
$a--;
var_dump($a);//int 107,字符串转换成整形进行运算
/*字符串最后一个字符对应的ASCII码做运算*/
$a = '1a4';
$a++;
var_dump($a);//string '1a5',最后一个字符对应的ASCII码做运算
$a = 'a';
$a++;
var_dump($a);//string b,非数字字符串不转换整形0,而是ASCII码做运算
$a--;
var_dump($a);//string b,递减运算符对字符字符串操作无效
- 位运算符
~,按位取反运算时,类型不做转换;&,按位与,|,按位或,^,按位异或,<<,左移,>>右移操作时,字符串和浮点型转换成整形
/*按位取反运算时,类型不做转换*/
$a = '5';
var_dump(~$a);//乱码
/*&,按位与,|,按位或,^,按位异或,<<,左移,>>右移操作时,字符串和浮点型转换成整形*/
$a = 10.5;
var_dump($a >> 1);//5, 浮点型转换成整形
$a = '1abc';
var_dump($a << 1);//2, 字符串转换成整形
- 逻辑运算符
其他类型转换成布尔型。空字符串''或'0'转换成false;数字0或0.0转换成false;空值NULL,没有成员的数组转换成false;其余都转换成布尔型true
$a = 'b';//true
$b = '0';//false
$c = 'false';//true
var_dump(!$a);//false
var_dump($a && $b);//false
var_dump($a && $c);//true
- 算数运算符
字符串转换成整形或者浮点型
$a = '10.5';
$b = '12';
$c = 1;
var_dump($a+$b);//22.5, 字符串转换成浮点型
var_dump($a%$c);//0, 浮点型转换成整形
var_dump($a/$b);//0.875,整形转换成浮点型
- 比较运算符
其他类型和数字类型做比较时,转换成数字类型。字符串之间的比较转换成ASCII码做比较。
$a = '12hkd';
$c = 12.0;
var_dump($a==$c);//true, 字符串转换成整形
$a = '12hkd';
$c = '12.0';
var_dump($a>$c);//true, 不转换,字符串ASCII码做比较
$a = 'd';
$c = 0;
var_dump($a==$c);//true, 字符串转换成整形
- 赋值运算符
=,+=,-+,数字类型的赋值运算符,转换成数字类型。.=字符串类型的赋值,运算符转换成字符串
字符串转换成数字的原则为:从左边开始依次寻找,直到找到不为数字类型的字符为止,返回找到的数字转成数字类型。
- 字符串连接符
转换成字符串
php运算时默认的类型转换的更多相关文章
- 我的Java开发学习之旅------>解惑Java进行三目运算时的自动类型转换
今天看到两个面试题,居然都做错了.通过这两个面试题,也加深对三目运算是的自动类型转换的理解. 题目1.以下代码输出结果是(). public class Test { public static vo ...
- C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换
区别: 隐式转换失败编译会报错. 显示转换有可能精度丢失. 根据项目的编译设置,显示转换溢出可能会报错,如果设置溢出且未使用checked检查,运行时如果发生溢出会产出未知的计算结果. 在数字运算时, ...
- python自动类型转换(针对于Number数据类型来的)精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转化
# ### 自动类型转换(针对于Number数据类型来的) ''' 精度从低到高 bool->int-> float->complex 当两个不同是数据类型运算时候,默认想更高进度转 ...
- js在运算时的类型转换
日期类型与数字类型的运算 在加法时将日期对象与数字都当作字符串进行连接 字符串的运算方式中没有减法.乘法.除法.转化成数字类型进行运算 字符串类型字符与数字类型的运算 在加法时将二者都转换成字符串进行 ...
- Java中byte、short、char、int、long运算时自动类型转化问题
-------------------------------------------------------------------------------------------------- ★ ...
- 使用C/C++,赋值运算时发生的转换
使用C/C++,赋值运算时发生的转换主要有以下四种情况 一: 两边类型不同: 结果: 自动完成类型转换! 二: 长数赋给短数: 结果: 截取长数的低位送给短数! 三: 短数赋给长数: 结果: 原来是什 ...
- Double 类型运算时的精度问题
double 类型运算时的 计算的精度不高,常常会出现0.999999999999999这种情况,那么就须要用BigDecimal 它是java提供的用来高精度计算的工具类 以下是对这个类的一个包 ...
- sql server 中进行除法运算时,如何得到结果是小数形式呢?
我们正常进行除法运算时,sql默认是返回一个四舍五入的数 比如12除以5,17除以3 --算法1:返回结果:2 需要的是2.40 ) as 结果1 --算法2:返回结果:5 需要的是5.67 ) as ...
- 关于Java中用Double型运算时精度丢失的问题
注:转自 https://blog.csdn.net/bleach_kids/article/details/49129943 在使用Java,double 进行运算时,经常出现精度丢失的问题,总是在 ...
随机推荐
- 使用JDT.AST解析java源码
在做java源码的静态代码审计时,最基础的就是对java文件进行解析,从而获取到此java文件的相关信息: 在java文件中所存在的东西很多,很复杂,难以用相关的正则表达式去一一匹配.但是,eclip ...
- webstorm 编辑器破解 (麻麻再也不用担心过期了)
先去官网下载webstorm2016.1.3版本(目前只知道2016.1这个版本可以永久破解,不会过期) 再下载webstorm2016.1的破解补丁 将下载好的破解补丁解压,会有一个Jetbrain ...
- Linux JDK+TOMCAT+MYSQL+redis 安装日志
检查是否安装iptables #先检查是否安装了iptablesservice iptables status#安装iptablesyum install -y iptables#升级iptables ...
- 3月题外:关于GeoServer和OpenLayers3实用开源插件或组件的总结
Geoserver篇 注意: 1)用法 GeoServer-Extension的使用方法:将jar包直接放入部署在tomcat上的geoserver/WEB-INF/lib文件夹中 2)在安装插件时, ...
- http-server 命令行
安装 (全局安装加 -g) : npm install http-server (npm install --global http-server) 在站点目录下开启命令行输入 http server ...
- ASP渲染下拉框使时间依次减少
<% x=year(now()) y=year(now())-1 Do While y>2002%><li><a href="#201 ...
- sonarqube代码检测
1.安装java环境 略 2.下载sonarqube包 sonarqube与sonar-runner的下载地址:http://www.sonarqube.org/downloads/ 将下载好的软件包 ...
- ajax(省,市,县)三级联动
下面我们用Jquery,ajax,做一个省,市,县的三级联动: 下面是我做三级联动下拉的步骤以及逻辑 第一步:先做一个省市区表格 第二步:建个PHP页面显示用我是在<body>里放< ...
- 解决input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能
最近做项目遇到: 背景:点击单元格,easyUI自动生成input可编辑框. 问题点:input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能 要实现需求: 1.回车键 ...
- Timestamp解析0000-00-00 00:00:00报格式错误
mysql中存储的是Timestamp类型的0000-00-00 00:00:00, 但是在java程序中使用 Timestamp.valueOf("0000-00-00 00:00:00& ...