• 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);
    ?>
  • 相关阅读:
    BZOJ 3992: [SDOI2015]序列统计
    BZOJ 4836: [Lydsy1704月赛]二元运算
    2.Add Two Numbers
    [RN] React Native 调试技巧
    [商业世界] 商业三流:信息流、资金流、物流
    [杂谈] 记 程序员 对抗失眠烦恼的 大法
    [未来成长]让写作成为一种生活习惯
    [未来成长] 分享:《麦肯锡教我的写作武器》如何写出一篇具有逻辑表现力的文案
    [未来成长] 分享:在腾讯的八年,我的职业思考
    [PHP]:AES对称加密 -- 支持PHP7
  • 原文地址:https://www.cnblogs.com/furuihua/p/12061008.html
Copyright © 2020-2023  润新知