章节
笔记
提问
课件

php入门教程之一周学会PHP

php数据类型之自动转换和强制转换

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 '凤姐凤姐爱死我,执行假区间咯';
}
?>

其他类型的自动类型转换

自动类型转换在运算时也可以发生。跟所有我们总结的规律和观点一样:先总结、后实验。

只有标量在运算时会产生以下的自动类型转换:

2015-07-28_55b79dcad98de.png

<?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字符串开始处是整型或浮点类型的字符,会转成对应的类型参与运算

强制类型转换

强制类型转换有三种方式:

    1.用后面的三个函数可以完成类型转换,intval()、floatval()、strval()

    2.变量前加上()里面写上类型,将它转换后赋值给其他变量

    3.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;
   var_dump($jieguo);
    //把浮点变数组
   $fo = 250;
   $jieguo = (array)$fo;
   var_dump($jieguo);
   //其他的操作方式,按照文字总结的规律你来试试
?>

settype(变量,类型) 直接改变量本身

<?php
    //定义浮点变为整型
    $fo = 250.18;
   //settype第二个参数是int,你实验的时候要记得第二个参数要为字符串类型
    settype($fo,'int');
    //输出看看结果
    var_dump($fo);
?>

【你试试】以下是强制类型转换时的特点,每一项你做实验看看对不对:

    1.空转为整型会为整型的0

    2.空转为浮点会为浮点的0

    3.空转为字符串会为空字符串‘’

    4.浮点的123.0转为字符串会为字符串123

    5.浮点的123.2转为字符串会为字符串的123.2

    6.浮点即使小数点再大,它都会被干掉,会舍掉小数点后面的值

    7.如果字符串转为整型的时候,如果数值在前面,会将前面的数值拿出来做为整型的转换值。

    8.settype(变量,'null'); 等价于 unset()一个变量

    9.$目标变量 = (类型)$操作变量 只会改变目标变量的类型,不会改变原变量的类型,Settype是改变原值

<?php
      //小可爱,记得自己做实验,验证上面的9点哟
    $t=12.9;
    settype($t,'int');
    var_dump($t);
?>

set 读音:[sɛt]
解释:设置

type 读音:[taɪp]
解释:类型、方式


继续学习
<?php //浮点类型的的0,换成其他值试试 $bool = 0.0; if($bool){ echo '美女美女我爱你'; }else{ echo '凤姐凤姐爱死我,执行假区间咯'; } ?>
提交重置代码
0/300
  • 清水先生
    <?php $a = '15.88888'; settype($a,'int');//将原值$a改变了; var_dump($a); $b = '15.88888'; $c = (int)$b;//原值$b未被改变 var_dump($c); ?>
    时间:5个月前1
  • 跟着独孤九贱学PHP
    验证 8 9 给下 验证过程
    时间:9个月前1
  • phpcn_u13796
    要坚持哟!
    时间:9个月前1
  • 悟以往
    签到
    时间:10个月前1
  • 哦
    <?php $bl=10; $bl2=20; $jieguo=(string)$bl; var_dump($jieguo); var_dump($bl);//$b1还是整形 settype($bl2,'float'); var_dump($bl2);//$bl2从整形变成了浮点型了 ?>
    时间:2个月前0
  • 哦
    <?php /* $bl=10; unset($bl); var_dump($bl); */ $bl=10; settype($bl,'null'); var_dump($bl) ?>//两个值都反回的都是NULL
    时间:2个月前0
  • 清水先生
    <?php $a = 123.11111111; $b = (string)$a; var_dump($b); ?>
    时间:5个月前0
  • 清水先生
    <?php $a = 123.0; $b = (string)$a; var_dump($b); ?>
    时间:5个月前0
  • 清水先生
    <?php $a = null; $b = strval($a); var_dump($b); ?>
    时间:5个月前0
  • 清水先生
    <?php $a = null; $b = (float)$a; var_dump($b); ?>
    时间:5个月前0
  • 清水先生
    <?php $a = 11.8; $b = (int)$a; var_dump($b); ?>
    时间:5个月前0
  • 小圈圈~
    实验9 <?php $j = 1234.33; $k = (int)$j; echo $k . '<br>'; echo $j; ?>
    时间:6个月前0
  • 小圈圈~
    实验8 <?php $h = 23; settype($h,'null'); echo $h; $i =233; unset($i); //settpe(变量,'null')等价于unset(); ?>
    时间:6个月前0
  • 小圈圈~
    实验7 <?php $g = '2332shfwenfk'; settype($g,'int'); echo $g; ?>
    时间:6个月前0
  • 小圈圈~
    实验6 <?php $f = 12.9999999; settype($f,'int'); echo $f; ?>
    时间:6个月前0
  • 小圈圈~
    实验5 <?php $e = 123.2; settype($e,'string'); echo $e;
    时间:6个月前0
  • 小圈圈~
    实验4 <?php $d = 123.0; settype($d,'string'); echo $d; ?>
    时间:6个月前0
  • 小圈圈~
    实验3 <?php $c = ''; settype($c,'string'); echo $c; ?>
    时间:6个月前0
  • 小圈圈~
    实验2 <?php $b = ''; settype($b,'float'); echo $b; ?>
    时间:6个月前0
  • 小圈圈~
    实验1 <?php $a = ''; settype($a,'int'); echo $a; ?>
    时间:6个月前0
  • 战胜自己
    看到最后
    时间:8个月前0
  • Aの汉
    <?php $s="sd"; $t='123.0000000000000000之';//定义了字符串的变量
    时间:9个月前0
  • Aの汉
    $s=(int)$t; var_dump($t);echo "<br/>"; var_dump($s); $s=settype($t,'int'); echo "<br/>";var_dump($t);
    时间:9个月前0
  • Aの汉
    <?php $s="sd"; $t='123.0000000000000000之';//定义了字符串的变量 $s=(int)$t; var_dump($t);echo "<br/>"; var_dump($s); $s=settype($t,'int'); echo "<br/>";var_d
    时间:9个月前0
  • Aの汉
    <?php $s="sd"; $t='123.0000000000000000之';//定义了字符串的变量 $s=(int)$t; var_dump($t);echo "<br/>"; var_dump($s); $s=settype($t,'int'); echo "<br/>&quo
    时间:9个月前0
  • Aの汉
    我去,显示不全代码,那就只能不排版了
    时间:9个月前0
  • Aの汉
    <?php $s="sd"; $t='123.0000000000000000之';//定义了字符串的变量 $s=(int)$t; var_dump($t); echo "<br/>"; var_dump($s); $s=settype($t,'int'); echo
    时间:9个月前0
  • Aの汉
    第9: <?php $s="sd"; $t='123.0000000000000000之';//定义了字符串的变量 $s=(int)$t; var_dump($t); echo "<br/>"; var_dump($s); $s=settype($t,'int');
    时间:9个月前0
  • Aの汉
    第9: <?php //小可爱,记得自己做实验,验证上面的9点哟 $t='123.0000000000000000之';//定义了字符串的变量 $s=(int)$t; var_dump($t); echo "<br/>"; var_dump($s); $s=settype($t,'in
    时间:9个月前0
  • Aの汉
    第8: <?php //小可爱,记得自己做实验,验证上面的9点哟 $t='123.0000000000000000之'; settype($t,'null'); var_dump($t); unset($t); var_dump($t); ?>
    时间:9个月前0

手记推荐

更多