3.2.12 数据类型的自动转换和强制转换
PHP 在 PHP 5.x 阶段都是完全的弱类型的编程语言。所谓弱类型,就是在声明变量的时候,不需要指定变量的类型。我要声明一个整型的变量,我不用在前面非得写上类型,再写变量。
而 PHP 7 的性能有很大的提高。实际测试的结果,PHP 7 的性能与 PHP5.6 相比,提升了性能接近 200%。在 PHP 7 中有些地方,我们可以强制指定类型,也可以不用强制指定类型来声明变量。
我们接来下来讲强制类型转换和自动类型转换两个部份。
【默写级别】布尔值的自动类型转换、强制类型转换的英文单词
布尔值的自动类型转换
自动类型转换,就是数据类型在某些情况下,自动会变为其他的类型参与运算。自动类型转换的发生时机是:运算和判断的时候某些值会自动进行转换。
下面的情况是 布尔值判断时的自动类型转换 :
1,整型的 0 为假,其他整型值全为真
2, 浮点的 0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
3,空字符串为假,只要里面有一个空格都算真。
4,字符串的 0,也将其看作是假。其他的都为真
5,空数组也将其视为假,只要里面有一个值,就为真。
6,空也为假
7, 未声明成功的资源也为假
我们针对以上针理的规则一项一项来做实验看看结果。
1,整型的 0 为假,其他整型值全为真
<?php
//整型的 0,换成整型的其他值试试
$bool = 0;
if($bool){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
2, 浮点的 0.0,布尔值的假。小数点后只要有一个非零的数值即为真。
<?php
//浮点类型的的 0,换成其他值试试
$bool = 0.0;
if($bool){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
3,空字符串为假,只要里面有一个空格都算真。
<?php
//空字符串,中间没有空格哟。实验完加个空格试试
$str = '';
if($str){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
4,字符串的 0,也将其看作是假。其他的都为真
<?php
//0 这个字符串哟,试试其他值看看
$str = '0';
if($str){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
5,空数组也将其视为假,只要里面有一个值,就为真。
<?php
//这个数组当中啥也没放
$arr = array();
if($arr){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
6,空也为假
<?php
//声明了一个空的变量$bool
$bool = null;
if($bool){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
7, 未声成功的资源也为假
<?php
//下面这段代码会显示警告,可忽略。暂时只需要对着实验知道效果即可:未声成功的资源也为假
//下面这一块了解意思就行:打开 adasfasfasfdsa.txt 这个不存在的文件
$res = fopen('adasfasfasfdsa.txt','r');
if($res){
echo '美女美女我爱你';
}else{
echo '凤姐凤姐爱死我,执行假区间咯';
}
?>
其他类型的自动类型转换
自动类型转换在运算时也可以发生。跟所有我们总结的规律和观点一样:先总结、后实验。
只有标量在运算时会产生以下的自动类型转换:
<?php
//布尔变整型参与运算
$fo = true;
$result = $fo + 10;
//$result 结果为整型的 11,因为$fo 布尔的 true 变为了 1
//如果$fo 的值为 0
var_dump($result);
//字符串类型
$str = '419 不要爱';
$result = $str + 1;
//结果为 420。因为将$str 变为了整型的 419 参与运算
//将 419 放在字符串中间和结尾试试
var_dump($result);
?>
总结:
- 布尔值的 true 参与运算是会变成整型或者浮点的 1
- 布尔值的 false 参与运算是会变成整型或者浮点的 0
- 字符串开始处是整型或浮点类型的字符,会转成对应的类型参与运算
强制类型转换
强制类型转换有三种方式:
用后面的三个函数可以完成类型转换,intval()、floatval()、strval()
变量前加上() 里面写上类型,将它转换后赋值给其他变量
- settype(变量,类型) 直接改变量本身
我们来进行实验:
intval()、floatval()、strval() 转换
<?php
$float = 1.23;
$result = intval($float);
//看看结果是不是变了?
var_dump($result);
//鸭脖子为整型的 5
$yabozi = 5;
$re = floatval($yabozi);
var_dump($re);
//定义整型的变量
$yabozi = 23;
$bian = strval($yabozi);
//强制变成字符串试试
var_dump($bian);
?>
变量前加上() 里面写上类型,将它转换后赋值给其他变量
<?php
//定义一个变量,我们来变化一下试试
$transfer = 12.8;
//把浮点变为整型
$jieguo = (int)$transfer;
var_dump($jieguo);
//把浮点变为布尔
$jieguo = (bool) $transfer;
var_dump($jieguo);
//把布尔变整型
$bool = true;
$jieguo = (int)$bool;
//把浮点变数组
$fo = 250;
$jieguo = (array)$fo;
var_dump($jieguo);
//其他的操作方式,按照文字总结的规律你来试试
?>
settype(变量,类型) 直接改变量本身
<?php
//定义浮点变为整型
$fo = 250.18;
//settype 第二个参数是 int,你实验的时候要记得第二个参数要为字符串类型
settype($fo,'int');
//输出看看结果
var_dump($fo);
?>
【你试试】以下是强制类型转换时的特点,每一项你做实验看看对不对:
- 空转为整型会为整型的 0
- 空转为浮点会为浮点的 0
- 空转为字符串会为空字符串‘’
- 浮点的 123.0 转为字符串会为字符串 123
- 浮点的 123.2 转为字符串会为字符串的 123.2
- 浮点即使小数点再大,它都会被干掉,会舍掉小数点后面的值
- 如果字符串转为整型的时候,如果数值在前面,会将前面的数值拿出来做为整型的转换值。
- settype(变量,'null'); 等价于 unset() 一个变量
$目标变量 = (类型)$操作变量 只会改变目标变量的类型,不会改变原变量的类型,Settype 是改变原值
<?php //小可爱,记得自己做实验,验证上面的 9 点哟 $t=12.9; settype($t,'int'); var_dump($t); ?>
set
读音:[sɛt]
解释:设置
type
读音:[taɪp]
解释:类型、方式
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论