1.3PHP数据类型转换

本系列所有代码示例都是在win10*(64位),php7,apache环境下测试的
1、自动转换
自动转换通常是不同数据类型的变量进行混合运算时。不同类型的变量运算,先转换成同一类型,然后再运算。通常是4种标量类型(int、float、string、boolean)才能自动转换。需要注意的是,这里所说的自动转换并没有改变运算类型本身的数据类型。
例如,当$a+$b,变量$a本身并没有数据转换,在其他地方调用$a时,$a类型还是原数据类型。
在混合运算时,自动转换需要遵循转换按数据长度增加方向进行,保证精度不降低。
转换规则:
①布尔值参与运算时,true会转换为整型1、false会转换成整型0后再参与计算
②NULL会转换成整型0再参与计算
③有int和float参与运算时,int类型会先转换成float类型后再计算
④字符串和int或者string计算时,字符串会先转换为数字。eg:“abc”会转换成0;“123abc”会转换成123;“123.123abc”会转换成123.123。
⑤有浮点型参与运算的,结果也是浮点型。全是整型参与运算的,结果则是整型。
eg:


$a = true;
$b = 123;
echo ($a+$b);//输出124

$c = '1.1';
$d = 1;
echo ($c+$d);//输出2.1

$a = '1.1a1';
$b = 123;
echo ($a+$b);//输出124.1,在php7下回报Notice: A non well formed numeric value encountered in...,需要强制转换计算前

2、强制转换
1)在不改变原变量类型和值的情况下,强制转换,只是在计算中改变类型,或者用变量接收。
①(int),(integer):转换成整型
②(bool),(boolean):转换成布尔型
③(float),(double),(real):转换成浮点型
④(string):转换成字符串
⑤(array):转换成数组
⑥(object):转换成对象
⑦intval(),floatval()和strval()。intval()获取变量的整数值,floatval()获取变量浮点值,strval()获取变量的字符串值,不能将者三个函数用于数组或对象。
2)直接改变原变量类型和值用settype(),例如settype($a,‘string’);
eg:


	$a = '5a';
	settype($a,'int');
	var_dump($a);//输出int(5)

3、转换细节
1)整型和浮点型
①整型转换为浮点型:由于浮点型的精度范围远大于整型,所以转换后的数值精度不会改变。
②浮点型转换为整型:自动舍弃小数部分,只保留整数部分。注:如果一个浮点型超过整数取值的有效范围,其结果将是无法确定的(整数的最大值约是2.147e9,这是针对32位来说的)。
eg:


	$a = 3.1e19;;
	var_dump($a);//输出float(3.1E+19)
	echo (int)$a;//输出-5893488147419103232

2)布尔型以下类型转换为布尔类型的false,其他的转换为true
①0转换为false
②0.0转换为false,var_dump((boolean)0.0);//输出false,var_dump((boolean)'0.0');//输出true
③空白字符""和字符串"0"转换为false
④没有成员的数组array()转换为false
⑤NULL转换为false

3)字符串转换为数字,转换后的数字是从字符串开始部分的数值型字符串,数值型字符串包括正负值和用科学计数法表示的数字。
eg:


	$number=intval("5.6abc"); //5
	$number=(float)"+5.6abc"; //5.6
	$number=floatval("-1.2e3f4g5"); //-1.2e3
	$result="12.3xy45"-6; //6.3
	$result="xy1234"/5; //0,PHP7此处会报A non-numeric value encountered警告,在使用(+ - * / ** % << >> | & ^) 运算时,例如a+b,如果a是开始一个数字值,但包含非数字字符(123a),b不是数字值开始时(b456),就会有A non-numeric value encountered警告。
	$result="1.2.3.4"*5; //6
	$result=1+"-1.3e3"; //-1299

4)数组
①布尔、数字和字符串转换为数组,将得到一个包含一个该类型数据元素的数组
②NULL转换为数组,会得到一个空数组
③对象转换为一个数组,所得到的数组键名为对象属性名,值为对应对象属性的值

5)其他
①布尔类型转字符串,false转空字符串"",true转"1"
②数组转字符串,是"Array"
③资源转字符串,是"Resource id#1"
④对象转字符串,是"Object",php7测试报error级别错误
⑤对象转字符串浮点数,php5起报e_notice级别错误,输出是float(1);

4、读取变量类型函数
var_dump($var); //常用于测试
②gettype($var);//当变量不是其八种标准变量时,会返回unknown type
③检测变量是否是某种类型的函数: is_bool()、is_float()、is_integer()、is_numeric()、is_string()、is_array()、is_int() 和 is_object()等,若想测试一个变量是否是数字或数字字符串(如表单输入,它们通常为字符串),必须使用 is_numeric()。

你可能感兴趣的:(PHP,---php基础系列,php基础)