天天看点

自学PHP笔记 (三) 类型转换

在真正使用PHP写项目时会经常用到不同数据类型之间进行转换,PHP中类型转换是比较简单的,只需要在变量前面加上用括号括起来的数据类型名称就可以了,数据类型转换有以下几种:

转换类型 说明
(bool)(boolean) 转换为布尔值
(string) 转换为字符串
(int)(integer) 转换为整数
(float)(double)(real) 转换为浮点型
(array) 转换为数组
(object) 转换为对象
(unset) 转换为NULL,也就是删除变量
(binary)b前缀 转换为二进制字符串

除了上面几种转换方式还有一个使用​

​settype()​

​函数进行转换

【示例】使用​

​settype()​

​函数进行数据类型转换

<?php
$a = "abc";
$b = 123;
settype( $b, "float");
var_dump($b);
?>
      

输出结果为:​

​float(123)​

【方法】​

​settype()​

​使用方法

函数内第一个为变量,在上面示例中为​

​$b​

​,第二个参数为数据类型,也就是你想将这个变量值转换为哪种类型,在上面示例中使用的是​

​float​

​,在PHP7版本中支持boolean、float、integer、string、null、array、object。注意:此函数只能返回布尔值,可用于判断,类型转换成功则返回​

​true​

​,转换失败则返回​

​false​

【示例】转换数据类型的常用方法

<?php
$num = '123abc';
var_dump((integer)$num);
echo '<br>';
var_dump((float)$num);
echo '<br>';
var_dump((string)$num);
?>
      

输出结果为:

int(123)
float(123)
string(6) "123abc"
      

1.转换为字符串

一个值可以通过在值前面加上​

​(string)​

​或者​

​(strval)​

​函数来转换为字符串,在一个需要字符串的表达式中,字符串会自动转换,在使用函数​

​echo()​

​print()​

​时,或者在一个变量和一个字符串进行比较时,就会发生这种转型。​

​print()​

​类似于​

​print_r()​

​。

【示例】

<?php 
$str = 'abcdef';
$num = 12345.123;
var_dump((string)$num);
echo '<br>';
if ($str == 'abcdef') {
echo true;
  }
?>
      
string(9) "12345.123"
1
      

【注意】在进行字符串转换时应注意以下几点:

  1. 一个布尔值被转换时则会将​

    ​true​

    ​转换成​

    ​1​

    ​,而​

    ​false​

    ​值将会被转换为空​

    ​""​

    ​这里空不是NULL,而是空的字符串,这种转换可以在布尔值和字符串之间随意转换。
  2. 一个整数或者浮点数被转换字符串,则会转换为数字的字面样式的字符串,包括采用科学技术法记录的浮点数。
  3. 数组被转换为字符串​

    ​Aaary​

    ​,因此使用函数​

    ​echo()​

    ​print()​

    ​无法正确的显示出数组的值,如果想要正确输出数组中的值则需要采用​

    ​echo (array('$a'))​

    ​这种方式进行,也就是读取数组中值的方法。
  4. 资源总会被转换为​

    ​Resource id#1​

    ​结构的字符串,其中1是PHP分配给该资源独有的数字。
  5. NULL总会被转换为空的字符串。

2.转换为整数

想要将一个值转换为整数,可以使用​

​(int)​

​(integer)​

​进行强制转换,不过大多数都不需要进行转换,在使用运算符、函数或者判断数值需要一个整数值时,值会自动转换为整数,还可以通过​

​intval()​

​函数进行转换。

【注意】在进行转换整数时需要注意以下两点:

  1. 当要将布尔值转换为整数时,则会将布尔值中​

    ​true​

    ​转换为​

    ​1​

    ​,​

    ​false​

    ​则会被转换为​

    ​0​

  2. 当要将浮点数转换为整数时,将向零取整,如果浮点数超出了整数范围,则转换结果变得不容易控制,这里不建议将未知的浮点数转换为整数,因为获取的结果可能不是你想象的那样哦,还有就是向零取整并不是四舍五入。
<?php
$bool = true;
$float = 10.6111;
$abc = ( 0.1 + 0.7 ) *10;
echo intval($bool);
echo '<br>';
echo intval($float);
echo '<br>';
echo (int)$abc;
?>
      
1
10
7
      

这个示例可以看出正常情况下​

​$abc​

​运算结果为​

​8​

​,但是当转换为整型后确输出了​

​7​

​,输出结果不正确,所以在浮点数转换整数时一定要注意。

3. 转换为布尔值

想要将一个值转换为布尔值是比较简单的,只需要使用​

​(bool)​

​(boolean)​

​来强制转换为布尔值即可,大部分情况下是不需要进行转换的,当使用运算符、函数或者做判断时都可以自动转换为布尔值的。

【注意】在转换布尔值时需要注意下面几个值转换则会转换为​

​false​

  1. ​0​

    ​:整数零
  2. ​0.0​

    ​:浮点数零
  3. ​"0"​

    ​:字符串零
  4. ​""​

    ​:空字符串
  5. ​空数组​

    ​:没有任何值得数组
  6. ​空对象​

    ​:没有任何成员变量得对象
  7. ​NULL​

    ​:特殊类型NULL
  8. 从没有任何标记得XML文档生成得SimpleXML对象

    除了以上值所有类型所有值都会转换为​

    ​true​

<?php
$array = array();
$int = 1;
$str = "";
var_dump((bool)$array);
echo '<br>';
var_dump((bool)$int);
echo '<br>';
var_dump((bool)$str);
?>
      
bool(false)
bool(true)
bool(false)
      

4. 检测数据类型

在很多时候都需要由程序自动去判断数据类型,PHP内置了一些检测数据类型得函数,可以根据不同得类型进行检测,判断是否属于某种类型,如果符合则返回​

​true​

​,如果不符合则返回​

​false​

​。常用得数据类型检测函数:

检测函数
is_bool 检测变量是否为布尔值
is_string 检测变量是否为字符串
is_float 检测变量是否为浮点数
is_int 检测变量是否为整数
is_null 检测变量是否为空
is_array 检测变量是否为数组
is_object 检测变量是否为对象
is_numeric 检测变量是否为数字或者是数字组成得字符串
is_double

【示例1】判断是否为整数

<?php
$int = 100;
if (is_int($int)){
echo '$int'."是整数类型,并且整数值为$int";
  }else{
echo '$int'."不是整数类型";
  }
?>
      

​$int是整数类型,并且整数值为100​

【示例2】判断是否为浮点数

<?php
$int = 100;
if (is_float($int)){
echo '$int'."是浮点数类型,并且浮点数值为$int";
  }else{
echo '$int'."不是浮点数类型";
  }
?>
      

​$int不是浮点数类型​

【小灶】在测试字符时经常会遇到不知道会输出什么类型得值,也不知道自己写得变量是什么类型时,可以采用​

​gettype()​

​var_dump()​

​查看变量或者值得数据类型

  • ​gettype​

    ​函数只输出值或变量得类型,不会输出值
  • ​var_dump​

    ​函数即输出值也输出类型

    ​gettype​

    ​函数输出变量类型
<?php
$int = 0.1111;
echo gettype($int);
?>