• php运算时默认的类型转换


    php属于弱类型语言,使用数据时无需指定其数据类型。对于学C语言入门的我,刚刚接触时感觉很神奇,但是随之而来的也有烦恼。

    总结一下php中默认的类型转换,按照运算符类型,只总结能够自动做类型转换的运算符,不能够转换的运算符在此不做罗列,关于运算符优先级,稍后会有单独的文章总结。

    • [],数组下标

    只要数组有一个字符串类型的键,其余键都转换成字符串;没有键,或者键都为数字,所有键转换成整形,浮点数只舍不入,无下标的键为前一个下标加1

    /*所有键类型转换成字符串*/
    $arr = array('wolf', 'a'=>'hippo', '1'=>'tiger', 1=>'panda', '20'=>'elephant', '02'=>'cock', '2.0'=>'dog', 3.3=>'pangolin');
    var_dump($arr[02]);//null, 找$arr[02]即$arr[2]转换成$arr['2'],数组没有下标为'2'的元素
    var_dump($arr['1']);//panda, 'tiger'和'panda'的下标都为'1',后者把前者覆盖
    var_dump($arr[0]);//wolf, 'wolf'元素自动添加下标0,转换成'0'
    var_dump($arr[a]);//hippo, $arr[a]转换成$arr['a']
    var_dump($arr[3.3]);//pangolin, $arr[3.3]转换成$arr[3]转换成$arr['3']
    var_dump($arr['3.3']);//null, $arr['3.3'],数组没有下标为'3.3'的元素
    /*所有键类型转换成整形*/
    $arr = array('apple', 1=>'litchi', 2=>'pear', 4.4=>'banana', 'orange');
    var_dump($arr[02]);//pear, $arr[02]即$arr[2]
    var_dump($arr['02']);//null, 数组没有下标为'02'的元素
    var_dump($arr['0']);//apple, apple自动添加下标0
    var_dump($arr[4]);//banana, $arr[4.4]转换成$arr[4]
    var_dump($arr[5]);//organe, oragne自动添加下标5(4+1)
    •  ++/--,递增、递减

    数字字符串转换成整形或者浮点型,转换后进行运算;非数字字符串最后一个字符对应的ASCII码做运算,类型不变。后一种情况时,只对递增运算符有效,递减运算符无效。

    /*数字字符串转换成整形*/
    $a = '108';
    $a--;
    var_dump($a);//int 107,字符串转换成整形进行运算
    /*字符串最后一个字符对应的ASCII码做运算*/
    $a = '1a4';
    $a++;
    var_dump($a);//string '1a5',最后一个字符对应的ASCII码做运算
    $a = 'a';
    $a++;
    var_dump($a);//string b,非数字字符串不转换整形0,而是ASCII码做运算
    $a--;
    var_dump($a);//string b,递减运算符对字符字符串操作无效
    •  位运算符

    ~,按位取反运算时,类型不做转换;&,按位与,|,按位或,^,按位异或,<<,左移,>>右移操作时,字符串和浮点型转换成整形

    /*按位取反运算时,类型不做转换*/
    $a = '5';
    var_dump(~$a);//乱码
    /*&,按位与,|,按位或,^,按位异或,<<,左移,>>右移操作时,字符串和浮点型转换成整形*/
    $a = 10.5;
    var_dump($a >> 1);//5, 浮点型转换成整形
    $a = '1abc';
    var_dump($a << 1);//2, 字符串转换成整形
    • 逻辑运算符

    其他类型转换成布尔型。空字符串''或'0'转换成false;数字0或0.0转换成false;空值NULL,没有成员的数组转换成false;其余都转换成布尔型true

    $a = 'b';//true
    $b = '0';//false
    $c = 'false';//true
    var_dump(!$a);//false
    var_dump($a && $b);//false
    var_dump($a && $c);//true
    • 算数运算符

    字符串转换成整形或者浮点型

    $a = '10.5';
    $b = '12';
    $c = 1;
    var_dump($a+$b);//22.5, 字符串转换成浮点型
    var_dump($a%$c);//0, 浮点型转换成整形
    var_dump($a/$b);//0.875,整形转换成浮点型
    • 比较运算符

    其他类型和数字类型做比较时,转换成数字类型。字符串之间的比较转换成ASCII码做比较。

    $a = '12hkd';
    $c = 12.0;
    var_dump($a==$c);//true, 字符串转换成整形
    $a = '12hkd';
    $c = '12.0';
    var_dump($a>$c);//true, 不转换,字符串ASCII码做比较
    $a = 'd';
    $c = 0;
    var_dump($a==$c);//true, 字符串转换成整形
    • 赋值运算符

    =,+=,-+,数字类型的赋值运算符,转换成数字类型。.=字符串类型的赋值,运算符转换成字符串

    字符串转换成数字的原则为:从左边开始依次寻找,直到找到不为数字类型的字符为止,返回找到的数字转成数字类型。

    • 字符串连接符

    转换成字符串

  • 相关阅读:
    40_接口类型的使用
    39_方法值和方法表达式
    38_方法的重写
    37_匿名字段方法的继承
    36_方法集的使用
    文件方式实现完整的英文词频统计实例
    组合数据类型练习,英文词频统计实例上
    英文词频统计预备,组合数据类型练习
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作‘’
  • 原文地址:https://www.cnblogs.com/jinxiudaxin/p/6532625.html
Copyright © 2020-2023  润新知