php数据类型的基本概念
数据类型:data type,在PHP中指的是数据本身的类型,而不是变量的类型。
PHP 是一种弱类型语言,变量本身没有数据类型。
把变量类比成一个杯子(容器),杯子可以装雪碧、可乐,雪碧或可乐是饮料类型,但这个杯子是没被规定必须装什么类型的!
php数据类型
在 PHP 中将数据分为三大类八小类——
基本数据类型:4个小类
- 整型:int,系统分配4或8个字节存储(32位机器为4,64位机器为8),表示整数类型
- 浮点型:float/double,float和int一样根据机器位数分配4或8个字节,double则固定分配8个字节存储,表示小数
- 字符串型:string,系统根据实际长度分配,表示字符串
- 布尔型:bool,表示布尔类型,只有两个值——true和false
复合数据类型:2个小类,
- 对象类型:object,存放对象(面向对象思想)
- 数组类型:array,存储多个数据
特殊数据类型:2个小类
- 资源类型:resource,存放资源数据(PHP 外部数据,如数据库、文件)
- 空类型:NULL,只有一个值就是 NULL(不能运算)
用gettype()函数可以获取变量的类型,格式为:gettype(变量名)
php数据类型转换
①基本概念:
在很多的条件下,需要指定的数据类型。需要将外部数据(当前 PHP 取得的数据)转换成目标数据类型。
在 PHP 中有两种类型转换方式:
- 自动转换(我也习惯称为隐式转换):系统根据需求判定完成转换(用的比较多,效率偏低)
- 强制(手动)转换:开发者根据需要的目标类型手动进行转换,语法格式为小括号内写目标类型
在转换过程中,用的比较多的是转布尔类型(在需要判断的情况下)和转数值类型(在需要算术运算的情况下)
②其它类型转布尔类型(bool)
在 PHP 中转变成bool类型后会是false的情况较少,故特殊记忆转为bool类型后值是false的值,其余则为true。
下面给出表格对照,可以观察到,主要是这几种形式的表达式的值转换为bool类型后会是false——
- 变量未定义
- 变量定义了但未赋值
- 变量的值跟空相关(空字符串"",空值null,空数组array())
- 变量的值跟零相关(整数0,字符'0',字符串"0")(注:PHP和Python一样不强区分字符和字符串,这里是笔者根据C、C++、Java的习惯进行主观区分,即单引号包围一个字符,双引号包围一个字符串)
- 特殊的,变量的值本身就为false,转为bool类型自然是false,但如果变量的值是字符串"false",转为bool类型却是true!
③其它类型转数值类型(int、float、double等)
首先:所有数据类型转为float类型时,结果的类型都是double。
(1)布尔类型(bool)转整型(int)或者浮点型(float/double)
true转为1,false转为0,转浮点型时无论是float还是double,结果都为double,且不显示小数位。
(2)string类型转整型(int)或者浮点型(float/double)
以字符开头的字符串,转数值类型的结果的值,都为0
以数字开头的字符串,
转int类型时,从左往右一直取到字符出现;转float/double类型时,小数点会取且只取一次
数据类型的获取、判断、设定
这部分作为补充内容,不建议记忆,需要用或者见到但不认识时去查阅一下,API太多了,能不记尽量不记。
gettype()函数获取变量的数据类型,如gettype($a);
is_xxx()函数判断某变量是不是xxx类型,如is_int($a);
settype()函数设置某变量的类型,如settype($a, "int")
注意settype()函数和强制转换的区别,强制转换是复制一份数据进行转换,而settype()函数是直接对原数据的类型进行设置。