1.php是一门弱类型语言
什么叫弱类型:就是这8种数据类型可以自动转换而且不需要人工介入
2.数据类型转换分类
自动数据类型(隐形数据类型转换)
自动类型转换不需要人工干预
自动类型转换发生在运算或者判断过程中
自动类型转换仅限标量(整型、浮点型、字符串、布尔型)
-
自动类型转换在类型转换过程中一般是向着更精确的数据进行转换
//demo1 $str = '999'; $int = 1; $result =$int + $str; var_dump($result);//int 1000 //demo2 $float = 3.14; $int = 2; $result = $float + $int; var_dump($result);//float 5.14 //判断 if(3 > 5){ echo 'a'; }else{ echo 'b'; }
强制数据类型(显性数据类型转换)
-
使用语言结构方式修改变量类型
格式:新变量 = (数据类型关键字)原变量
类型 | 关键字 | 是否可以转换 |
---|---|---|
整型 | int / integer | 是 |
浮点型 | float / double | 是 |
字符串 | string | 是 |
布尔值 | boolean / bool | 是 |
数组 | array | 是 |
对象 | object | 是 |
资源 | resource | 否 |
Null | null | 否 |
$var = 250;
echo '原类型';
var_dump($var);
//进行数据类型转换
$newVar = (string)$var;//string '250' (length=3)
$newVar = (bool)$var; //boolean true
$newVar = (array)$var; //array (size=1)
0 => int 250
$newVar = (double)$var; //float 250
$newVar = (float)$var; //float 250
$newVar = (object)$var; //object(stdClass)[1]
public 'scalar' => int 250
$newVar = (resource)$var; //转不了,报错
$newVar = (null)$var; //转不了,报错
echo '转换后的类型';
//转换后的类型
var_dump($newVar);
这里主要讲一下布尔值转换。
$var = 10.99;
$newVar = (bool)$var; // boolean true
var_dump($newVar);
那什么时候是false呢?当然是变量值为空的时候为false。
之前,在php04—数据类型5-特殊数据类型null以及检测变量是否为空的函数一节中,使用empty()也可以检侧变量值是否为空。
- 整型 : 0 为空
- 字符串: 空字符串=>''或者'这里面是空格'或者字符串的0 =>'0'
- 浮点 : 0.0
- 布尔值: false
- 数组: array() 空数组为空
- 对象: 对象都不为空
- 资源: 资源都不为空
- 空 null
-
使用指定类型的转换功能
strval(原变量); 转换字符串
floatval(原变量); 转换浮点型
-
intval(原变量) 转换整型
$var = 10; //进行转换 $newVar = strval($var); //string '10' (length=2) $newVar = floatval($var); //float 10 var_dump($newVar);
-
使用通用类型转换功能
格式:返回结果=settype(要转换的变量,'要转换的数据类型关键字');
返回结果:如果转换成功 返回true.如果转换失败返回false;
注意:settype功能最后改变的是原有的变量。
能转换数据类型的关键字:
- int integer
- float
- bool boolean
- string
- array
- object
- null
- resource 不能转换
$var = '爱卿不可,夜观星象、恐有血战,七日后方可攻城';
//使用通用类型转换功能
$result = settype($var,'int');
var_dump($result); //true
var_dump($var); //int 0
字符串转换为整型和浮点型注意事项
1.如果是纯数字字符串,转换之后只改变类型
2.如果是字符串以数字开头,数字后面是非数字字符串,那么将字符串最前面的连续的数字字符取出来转为数值,否则结果为0。
下面随便使用两种转换类型的方法写个demo.
//字符串转为整型
//demo1
$var = 'a2.00';
$newVar1 = (int)$var;
var_dump($newVar1); //int 0
//demo2
$var = '11.a2.00';
$newVar1 = (int)$var;
var_dump($newVar1); //int 11
//字符串转为浮点类型
$str = 'a10.88a678';
$new = floatval($str); //float 0
var_dump($new);