本文转发来自:https://blog.csdn.net/KH_FC/article/details/115558701

在真正使用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转换为1false则会被转换为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);
?>

输出结果为:double也就是浮点数类型

自学PHP笔记(三) 类型转换的更多相关文章

  1. 孤荷凌寒自学python第三十九天python 的线程锁Lock

    孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...

  2. 孤荷凌寒自学python第三十八天初识python的线程控制

     孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...

  3. 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化

    孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...

  4. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  5. 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习

     孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...

  6. 孤荷凌寒自学python第三十三天python的文件操作初识

     孤荷凌寒自学python第三十三天python的文件操作初识 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天开始自学python的普通 文件操作部分的内容. 一.python的文件打开 ...

  7. 孤荷凌寒自学python第三十一天python的datetime.timedelta模块

     孤荷凌寒自学python第三十一天python的datetime.timedelta模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.timedelta模块是一个表示 ...

  8. 孤荷凌寒自学python第三十天python的datetime.datetime模块

     孤荷凌寒自学python第三十天python的datetime.datetime模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.datetime模块包含了:datet ...

  9. 孤荷凌寒自学python第三天 初识序列

    孤荷凌寒自学python第三天 初识序列 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) Python的序列非常让我着迷,之前学习的其它编程语言中没有非常特别关注过序列这种类型的对象,而pyt ...

随机推荐

  1. 为什么说NGK公链的商用落地是可行的?

    互联网.大数据以及云计算的发展给人们的生活.工作带来了诸多便利,也让人们一次又一次感叹科技的进步.而NGK公链的诞生,更是让众人称之为传奇.其商用落地可行性,也让人惊叹.那么,为什么说NGK公链的商用 ...

  2. 基本的DOS命令

    基本的DOS命令 打开CMD的方法 菜单+系统+命令提示符 WIN+R后输入CMD 桌面或文件夹任意位置按住SHIFT后鼠标右键 常见的DOS命令 #盘符切换 直接输入要切换的盘符名称 如输入&quo ...

  3. flask启动常见问题1:sqlalchemy.exc.ArgumentError: Mapper mapped class UserCode->data_system_user_email could not assemble any primary key columns for mapped table 'data_system_user_email'

    我的描述:当我编辑好flask以后,ORM映射数据库完成,启动项目时,发生现象: 解决: 看字面的意思是主键导致的错误,于是我查看了data_system_user_email的键参数配置,发现表没有 ...

  4. http server源码解析

    本文主要过下http生成服务和处理请求的主要流程,其他功能并未涉及. 使用例子 const http = require('http'); http.createServer((req, res) = ...

  5. MYSQL安全模式"sql_safe_updates"设置update和delete不带where的操作限制

    前言 在数据库操作中,如果在update和delete没有加上where条件,数据将会全部修改. 不只是初识mysql的开发者会遇到这个问题,工作有一定经验的开发者有时难免也会忘记写入where条件. ...

  6. Java基本概念:内部类

    一.简介 描述: 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了. 内部类不是在一个java源文件中编写两个平行的类,而是在一个类的内部再定义另外一个 ...

  7. Pandas初体验

    目录 Pandas 一.简介 1.安装 2.引用方法 二.series 1.创建方法 2.缺失数据处理 2.1 什么是缺失值 2.2 NaN特性 2.3 填充NaN 2.4 删除NaN 2.5 其他方 ...

  8. h5返回上一页ios页面不刷新

    var isPage=false; window.addEventListener('pageshow', function () {         if (isPage) { window.loc ...

  9. git仓库创建及基本使用

    创建git用户 useradd git passwd git 创建目录 mkdir /home/git/repos/app.git/ -p 初始化目录 cd /home/git/repos/app.g ...

  10. CCF(棋局评估)博弈论+对抗搜索+DFS

    201803-4 棋局评估 这题主要使用对抗搜索,也就是每一步寻找可以下棋的位置,通过在这一步下棋看最后会取的什么样的分数. #include<iostream> #include< ...