PHP虽然是一门弱类型语言, 其也有自己的数据类型(八种数据类型), 只是在声明变量时无需指定变量的数据类型。
我们向变量存储什么样类型的数据, 其变量就是什么样的类型。在PHP中, 如果变量参与相关运算时, 其数据类型也会发生自动转换。
自动类型转换
在PHP中, 发生自动转换主要出现在以下四种类型中:
整型: int, integer
浮点型: float
布尔型: bool, boolean
字符串型:string
注意: 浮点数超出范围:-2147483648 ~ 2147483647 转为 整型, int, integer 不适合转换, 如: JAVA 13位毫秒时间戳
(1) 整型转布尔类型
在整型数据参数if等条件判断时, 整型数据会自动发生类型转换, 0转化为false, 其他数据转为为true。
$flag = 0;
if($flag){ //自动转换为bool形
echo "条件为真";
}else{
echo "条件为假";
}
(2) 字符串类型转整型或浮点型
在php中, 字符串类型如果参与数学运算时, 其数据类型也会自动发生变化, 转换为整型或浮点型数据。
1 如果字符串中是以整型数字开头的, 则自动转化为整型数据
$str = "123abc";
$sum = $str+1;
echo $sum;
输出结果: 124
2 如果字符串中是以浮点数字开头的, 则自动转化为浮点数据
$str = "123.34abc";
$sum = $str+1;
echo $sum;
输出结果: 124.34
3 如果字符串是以数字开头的且带有多个小数点, 则只取第一个小数点
$str = "123.34.21abc";
$sum = $str+1;
echo $sum;
输出结果: 124.34
$str = ".34.21abc";
$sum = $str+1;
echo $sum;
输出结果: 1.34
4 如果字符串不是以数字开头的, 则自动转化为数字0
$str = "abc666";
$sum = $str+5;
echo $sum;
输出结果:5
(3) 布尔类型转整型
在php中, 如果布尔类型的数据参与数学运算, 则也会发生自动转化。true则转换为1, false则转化为0
$flag = true;
$sum = $flag + 4;
echo $sum;
输出结果:5
(4) null类型转0
在PHP中,如果null参与数学运算, 其数据类型也会自动转化, 转换生成为0
$var = null;
$sum = $var + 4;
echo $sum;
输出结果:4
手工类型转换
在PHP中, 除了可以实现自动类型转换, 我们还可以手工实现数据类型转换。
<?php
$str1 = '123';
$str2 = '.1.2.3.4';
$flag = true;
$num1 = 6;
$num2 = 10.88;
var_dump((int)$str1);
var_dump((float)$str2);
var_dump((int)$flag);
var_dump((bool)$num1);
var_dump((int)$num2);
?>
判断变量的数据类型
is_bool(): 判断一个变量是否为bool类型
is_float(): 判断一个变量是否为float类型
is_integer():判断一个变量是否为integer类型
is_object(): 判断一个变量是否为object类型
is_array(): 判断一个变量是否为array类型
is_string(): 判断一个变量是否为string类型
is_resource():判断一个变量是否为resource类型
is_scalar(): 判断一个变量是否为标量类型(integer、float、bool、string)
is_null(): 判断一个变量是否为null类型
is_numeric():判断一个变量是否为数字类型(integer、float)
注意: "10.34" 返回值为true "10.34abc" 返回值为false
小窍门:在php, 以"is_"打头函数, 其返回的都是bool类型的数据(true或false)
is_numeric() 函数用于检测变量是否为数字或数字字符串。
is_int/is_integer主要是判断变量是否是整数类型, 其他类型是false
而从数据库查询到数据(1594001025) 不要使用is_int检测, 因为属于string类型, 要使用is_numeric()检测;
获取与设置变量的数据类型
gettype()
string gettype ( mixed $var ) 返回 PHP 变量的类型 var.
settype()
bool settype ( mixed &$var , string $type )将变量 var 的类型设置成 type。
$type(要设置的数据类型), 其值可以是如下几种数据类型:
"boolean" (或为"bool")
"integer"
"float"
"string"
"array"
"object"
"null"
实例:
<?php
$num1 = 10.88;
$str = 'hello world';
$num2 = 12888;
settype($num1, "integer");
settype($str, "boolean");
settype($num2, "float");
echo gettype($num1);
echo "
";
echo gettype($str);
echo "
";
echo gettype($num2);
?>
MySQL数据库查询的数据, 都是字符串类型, 不应该用于判断true和false(如价格: "0.00"), 需要进行转换后, 才能进行判断boolean。