首页 > 技术文章 > PHP-数据类型

wjglm 2018-08-22 11:49 原文

PHP-数据类型

1、整体划分

(1)标量类型: int, float, string, bool

(2)复合类型: array, object

(3)特殊类型: null, resouce

2、整数类型int, integer

  3种整数表示法

十进制写法:123:

  $n1 = 123;

八进制写法: 0123

  $n2 = 0123;

十六进制写法: 0x123

  $n3 = 0x123;

3、浮点类型float, double, real

(1)有两种写法:

  第一种:$v1 = 1.234; //带小数点,,就是浮点类型

  第二种:$v2 = 1.234E3;//含义是:1.234乘以10的3次方,即1234,带E的形式就是浮点数

           $v3 = 1234E3;//结果值是1234000,但也是一个浮点数。

 

(2)浮点数不应直接进行大小比较

因为浮点数在系统内部(cpu级别),很可能都是不精确表达。要想进行比较,我们只能考虑自己应用中的精度要求的基础上,将其转换为整数进行比较。通常的做法是:乘以10的精度位数数次方,比如精度要求3位有效数字,则乘以103次方

     

    

 

  注意:当整数运算的结果超出整数的范围后,会自动转换为浮点数。整数的范围,在32位系统下,大约正负20多亿

 

4、字符串类型string

js中,虽然有2种字符串表达形式,但也应该理解为是一种字符串:

var  str1 = ‘单引号字符串’

var str2 = “双引号字符串”;

但在php中,单引号和双引号字符串,是有不同细节含义的字符串。

 

php中,有4种字符串形式:

(1)单引号字符串:

 

结果:

 

 

(2)双引号字符串:

 

结果:

 

更多的转义符见手册如下:

 

 

 

(3)nowdoc(单引号)定界符字符串:

 

输出结果为:

 

 

(4)heredoc(双引号)定界符字符串:

 

结果:

 

 

5、布尔类型:bool, boolean

  用于标识某种只有两个状态值的数据:true,false——吃没吃,去没去,有没有。。。。。

在应用出,我们常常会(需要)直接将一个数据(可能是各种其他类型)当作一个布尔值来进行判断。

那么此时其实发生的是:会将该数据隐含转换为布尔值。

最常见的语法形式就是: num == 3   flag = 1

If(flag){}

if(  某数据/变量 ){

.................

}

那么,在php中,其他各种数据,隐含转换为布尔值的时候,会当作false的有:

0

0.0

null

“”

“0”

array(); //空数组

未定义的变量 //当然要尽量避免

 

其他数据就当作true来看待了。

 

看手册:PHP手册〉附录〉类型比较表〉使用 PHP 函数对变量 $x 进行比较

 

6、数组类型array    索引数组与关联数组

标识一系列数据的“有序排列”的集合体。

php中,数组的下标可以使用整数或字符串。

数字下标常说“索引号”,  

字符串下标常说“键名”。

实际上,在php的报错系统中,都叫做“index”,或offset

数组中还可以存储数组,就可以构成“多维数组”的形式。

数组遍历在php中有专门语法:

foreach( 数组名   as   下标变量$k  =>  值变量$v1 ){

//这里就是循环体,就可以使用两个变量$k, $v1

}

7、对象类型object

在php中,对象跟js中的有比较大的区别。

通常,js中的对象,有自定定义的(创建的),也有“现成”,比如window,location,标签对象。

但:

php中的对象,通常都是指自己定义的对象,纯语法的。

 

 

8、资源类型resource

含义:基本上都是指对外部数据的引用。(数据非php代码生成的)
不是PHP语言通过某种语法形式“创造”的数据,而是外部本来就有该数据(比如数据库,文件,图片),PHP只是通过某种语法(或方式)来对其进行某些操作。

9、空类型null

只是一个计算机中编程领域的“概念”类型,只是为了表达变量所存储的数据的某种特殊情形所创建的概念——没有存数据,或没有存有效的有意义的数据

 

10、类型转换

(1)自动转换:

通常自动转换是弱类语言的一个最基本也最方便的一个特征:它会在各种运算中根据运算符的需要也将非该运算符所能处理的数据转换为可以处理的数据。常见情形如下:

①if(数据){}:转为bool类型

②算术运算符:转为数字类型

③连接运算符:转为字符串类型 +  .  

④比较运算符:转为布尔类型或数字类型

两边如果有至少一个布尔,则另一边就会转为布尔,并进行比较

否则,就转为数字进行比较

特别常用的一个转换(不管是自动转换还是强制转换),就是字符串转换为数字:

“5” ==>>  5 //整数

“5.5” ==>> 5.5浮点数

“5abc” ==>> 5整数

“5.5ab” ==>> 5.5浮点数

“abc5” ==>> 0整数

“abc” ==>> 0整数

“” ==>> 0

(2)强制转换

就是通过语法来让某数据转换为另一种类型的数据,语法格式为:

(目标类型)数据;

 

 

注意:我们并不能使用该语法将任意类型的数据,转换为其他任意类型——因为有些类型之间的转换是没有意义的——系统内部也没有定义过该类型转换的规则。

——最常见的转换通常就发生在基本(标量)数据类型之间。

与var_dump():能够输出一个变量的完整信息。

11、getType(类型相关的系统函数)

  ①获取一个变量的类型名称,结果是一个单词(字符串), setType();设置一个变量的类型,语法: setType(变量名,目标类型)

 

②isset(), empty(), unset();

isset()判断一个变量是否存在数据:

empty()判断一个数据是否为空:接近我们的日常观念(没有就是空)

unset():销毁(删除)一个变量。

③is_XX类型() 系列函数:判断某个数据是否是某种类型,包括:

  is_int(), is_float(), is_numeric(),is_bool(), is_array(), is_scalar():

④is_numeric()对:3, 3.5,“3”,“3.14”判断都是true

⑤is_scalar():判断是否为标量类型(即int,float,stirng,bool)

推荐阅读