首页 > 编程笔记 > PHP笔记 阅读:203

PHP数据类型转换

数据类型转换是指将变量或值从一种数据类型转换成其他数据类型。转换的方法有两种,分别是自动类型转换和强制类型转换,下面就来分别介绍一下。

1、自动类型转换

每一个数据都有它的类型,具有相同类型的数据才能彼此操作。在 PHP 中,自动类型转换通常发生在不同类型的变量混合运算时,若参与运算的变量类型不同,则需要先将它们转换成同一类型,然后再进行运算。

通常只有四种标量类型(integer、float、string、boolean)和 NULL 才会在运算中自动转换类型。注意,自动类型转换并不会改变变量本身的类型,改变的仅是这些变量的求值方式。

自动类型转换虽然是由系统自动完成的,但在混合运算时,自动类型转换也需要遵循按数据长度增加的方向进行,以保证精度不降低。规则如下图所示。

数据自动类型转换的关系
图:数据自动类型转换的关系

【示例】下面通过一个简单的示例来演示一下 PHP 中自动类型转换。
<?php
    $str = '100abc';
    $str += 5;
    echo '此时 $str 的类型为:'.gettype($str).', 值为:'.$str.'<br>';
    $str += 3.14;
    echo '此时 $str 的类型为:'.gettype($str).', 值为:'.$str.'<br>';
    $str = null + 'C语言中文网';
    echo '此时 $str 的类型为:'.gettype($str).', 值为:'.$str.'<br>';
?>
运行结果如下:

此时 $str 的类型为:integer, 值为:105
此时 $str 的类型为:double, 值为:108.14
此时 $str 的类型为:integer, 值为:0

2、强制类型转换

PHP 中的强制类型转换和其他语言很类似,可以在要转换的变量之前加上用括号括起来的目标类型(例如 $var = (int)3.1415;),也可以使用具体的类型转换函数(例如 intval()、floatval()、strval() 等)或者 settype() 来转换类型。

使用在变量之前加上用括号括起来的目标类型的方式强制转换变量类型时,括号中允许使用的变量类型如下所示:

使用具体的转换函数 intval()、floatval()、boolval()、strval() 等来转换变量的类型时,这些函数的作用如下所示:

【示例】使用以上几个函数强制转换变量的类型。
<?php
    $str = '123.456abc';
    $int = intval($str);
    echo '变量 $int 的类型为:'.gettype($int).'<br>';
    $float = floatval($str);
    echo '变量 $float 的类型为:'.gettype($float).'<br>';
    $string = strval($str);
    echo '变量 $string 的类型为:'.gettype($string);
?>
运行结果如下:

变量 $int 的类型为:integer
变量 $float 的类型为:double
变量 $string 的类型为:string

上面介绍的两种强制类型转换的方式都不会改变被转换变量本身的类型,而是通过将转换得到的新类型的数据赋值给新的变量,原变量的类型和值不变。如果需要改变变量本身的类型可以使用 settype() 函数来完成,函数的语法格式如下:

settype(mixed &$var, string $type)

其中,$var 为要转换的变量;$type 为要转换的类型,可以是 boolean(bool)、integer(int)、float(double)、string、array、object、null。

【示例】使用 settype() 函数强制转换变量的类型。
<?php
    $str = (string)'123abc';
    $bool = (bool)true;
    settype($str, 'integer');
    settype($bool, 'string');
    echo '$str 的类型为:'.gettype($str).'<br> $bool 的类型为:'.gettype($bool);
?>
运行结果如下:

$str 的类型为:integer
$bool 的类型为:string

使用强制类型转换有以下几点需要注意:

编程帮,一个分享编程知识的公众号。跟着站长一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

文章不深奥,不需要钻研,在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「编程帮」,你已然超越了90%的程序员!

编程帮二维码
微信扫描二维码关注

所有教程

优秀文章