三、数据类型

一、数据类型分类

数据类型:data type,在PHP中指的是存储的数据本身的类型,而不是变量的类型。PHP是一种弱类型语言,变量本身没有数据类型。

在PHP中将数据分为三大类八小类:

1、简单(基本)数据类型:4个小类

(1)整型:int/integer,系统分配4个字节存储,表示整数类型(前提是能存的下,如果数太大,用double)。

(2)浮点型:float/double,系统分配8个字节存储,表示小数或者整型存不下的整数。

(3)字符串类型:string,系统根据实际长度分配,表示字符串(引号)。

(4)布尔类型:bool/boolean,表示布尔类型,只有两个值:true和false

2、复合数据类型:2个小类

(1)对象类型:object,存放对象(面向对象)

(2)数组类型:array,存储多个数据(一次性)

3、特殊数据类型:2个小类

(1)资源类型:resource,存放资源数据(PHP外部数据,如数据库、文件)

(2)空类型:NULL,只有一个值就是NULL(不能运算)

 

二、类型转换

类型转化:在很多的条件下,需要指定的数据类型,需要外部数据(当前PHP取得的数据),转换成目标数据类型

在PHP中有两种类型转换方式:

1、自动转换:系统根据需求自己判定,自己转换(用的比较多,效率偏低)

2、强制(手动)转换:认为根据需要的目标类型转换

强制转换规则:在变量之前增加一个括号(),然后在里面写上对应类型:int/integer....其中NULL类型要用unset()函数转换。

在转换过程中,用的比较多的就是转布尔类型(判断)和数值类型(算数运算)

其他类型转布尔类型:true或者false;

其他类型转数值的说明:

1、以字母开头的字符串,永远为0

2、以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点,第二个小数点会被当成字符)

<?php

    $a='abc1.1.1';
    $b='1.1.2.abc';

    //自动转换
    echo $a+$b;

    //强制转换
    echo '<br>',(float)$a,'<br>',(float)$b;
?>

 

三、数据类型判断

通过一组类型判断函数,来判断变量,最终返回这个变量所保存数据的数据类型:是一组以is_开头后面跟类型名字的函数:is_xxx(变量名),相同结果返回true,失败为false。

bool类型不能用echo来查看,可以使用var_dump结果查看

    //判断数据类型
    echo '<hr>';
    var_dump(is_int($a));
    var_dump(is_string($a));

还有一组函数可以用来获取以及设定数据(变量)的类型

1、gettype(变量名):获取类型,得到的是该类型对应的字符串

2、settype(变量名,类型):设定数据类型,与强制转换不同

(1)强制转换(类型)变量名,是对数据值复制的内容进行处理(不会处理实际存储的内容)

(2)settype会直接改变数据本身

    $a='abc1.1.1';
    echo '<br>',(float)$a,'<br>';
    echo gettype($a);

    echo '<hr>';

    var_dump(settype($a,'int'));
    echo gettype($a),":",$a;

 

四、整数类型

保存整数数组的类型(有一定的范围),4个字节存储数据,最大就是32位。大概42亿多一些,但是在PHP中默认是有符号类型(区分正负数)所以是±21亿多。

(一)PHP中的整型类型

在PHP中提供了四种整型的定义方式:十进制定义,二进制定义,八进制定义和十六进制定义。输出默认为十进制。

//定义四种整型数据
$a = 110; //十进制
$b = 0b110; //二进制
$c = 0110; //八进制
$d = 0x110; //十六进制
//默认的PHP输出是十进制
echo $a, '~', $b, '~', $c, '~', $d;

(二)整型类型进制转换

1、手动转换

十进制转二进制:除二取余法

二进制转十进制:从右开始,依次计算乘以2的n次方

2、内置函数转换

decbin()/bindec():十进制转二进制/二进制转十进制

decoct()/octdec():十进制转八进制/八进制转十进制

dechex()/hexdec():十进制转十六进制/十六进制转十进制

类似的还有很多,都可以互相转换

 

五、浮点型

浮点型:小数类型以及超过整型所能存储范围的整数(不保证精度),精度范围大概在15个有效数字左右。

$f1 = 1.23;
$f2 = 1.23e10;
$f3 = PHP_INT_MAX + 1;//整型超过自身存储的大小之后会用浮点型存储

var_dump($f1, $f2, $f3);

简单说明浮点数为什么同样的字节数存储数据,但是却能存储表示更大的数据呢?

00000000 00000000 00000000 00000000->11111111 11111111 11111111 11111111 (整型最大值:所有位都是有效数据)

浮点数:红色7位算的结果是10的指数,后面三个字节存储表示具体数值

00000000 00000000 00000000 00000000->11111111 11111111 1111111 1111111

尽量不用浮点数做精确判断:浮点数保存的数据不够精确,而且在计算机中凡是小数基本上存的都不精确

 

六、布尔类型

布尔类型:两个值true和false,通常是用于判断比较。不区分大小写。

empty():判断数据的值是否为“空”,空的意思是空字符串,不是NULL,如果为空返回true,不为空返回false

isset():判断数据存储的变量本身是否存在,存在变量返回true,不存在返回false

isset()是判断变量是否存在;empty()是判断变量中的值;

个人理解:一个变量只是声明,如$a。在PHP中不指定数据类型,所以只是声明的话,系统不会给分配内存空间,因为系统不知道如何分配(是按照int,还是string,还是其他)。isset()函数就是判断这个变量有没有被分配的内存空间,is_null()也是判断该变量有没有被分配内存空间。就算是$x=“”这样写,那么也说明了$x为string字符串类型,有了类型,就能分配内存空间了。所以就不是NULL,isset也返回true。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

并不傻的狍子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值