继续之前的PHP基础,这次为第二次基础的总结,涉及各种数据类型的介绍等。
一、整型
概念:数据是整数,但根据进制方式不同,有不同的数据格式。
- 十进制:默认格式。
- 八进制:起始用0作为标识。
- 十六进制:起始用0x作为标记。
- 二进制起始使用0b作为标记。
虽说有多种进制表示,但PHP默认最终输出都以十进制的标准输出。
如果想要保证原来的进制输出,就需要使用printf()函数,和C类似,但不会输出前面的进制标志。
1 | $int1 = 123; |
注意:整型最大的保存PHP_INT_SIZE,(即8个字节),最大值为PHP_INT_MAX,最小值-PHP_INT_MAX-1
附(类型转换函数)
十进制转二进制 decbin() 函数
十进制转八进制 decoct() 函数
十进制转十六进制 dechex() 函数
二进制转十六制进 bin2hex() 函数
二进制转十制进 bindec() 函数
八进制转十进制 octdec() 函数
十六进制转十进制 hexdec()函数
任意进制转换 base_convert() 函数
1
2$hexadecimal = 'A37334';
echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100
二、浮点型
PHP中浮点数的精度是13~14位,PHP7中浮点数的最大值表示:1.8e308
浮点数采用8个字节存储,存储原理为:符号位+54个数值位+9个指数位
注意:0.3与8.1/2.7比较,计算器不会算出相等的结果。
三、 布尔类型
$res = true;
$res = FALSE
不区分大小写
PHP中尽量不要直接输出bool类型的值。
四、 字符串型
定义方法:
单引号
''
包裹字符双引号
""
包裹字符定界符包裹:使用PHP中的定界符<<<标识符+标识符结尾形式包裹(多行字符串的一种形式)
heredoc结构:双引号的一种多行字符串形式
1
2
3
4#EOT并非固定,自己取名即可
$str = <<<EOT
这里都是字符串
EOT;nowdoc结构:单引号的一种多行字符串形式
1
2
3
4#EOT并非固定,自己取名即可
$str = <<<'EOT'
这里都是字符串
EOT;
区别:
- 单引号是简单的字符串,可以解析少量转义字符:单引号(\‘),反斜杠(\\)。
- 双引号功能较多:
- 里面能解释较多转义符:$符号:(\$),双引号:(\“),反斜杠:(\\),回车换行符:(\r\n),TAB符:(\t)
- 里面如果有PHP变量,也可以被解析
- 定界符中heredoc与双引号效果一致,nowdoc与单引号效果一致,唯一区别:定界符会自动保留格式:即字符串内部有换行符等自动保留。
注意:
- 双引号解析变量时,系统是有规矩匹配变量的。
- 变量名不要与其他字符或者数字保留在一起:”$abc”系统会自动识别为$abc,而不是$a。
- 解决方案1:让变量与后面的内容之间有空格,如”$a bc”,系统则会识别为$a,但是多了一个空格。
- 解决方案2:使用{}将变量独立包裹起来,如${a}bc,建议使用。
- 变量名不要与其他字符或者数字保留在一起:”$abc”系统会自动识别为$abc,而不是$a。
- 使用定界符定义多行字符串时的规矩:
- 定界符内的所有内容(包括注释)都是字符串的内容。
- 定界符的起始符号之后,结束符号之后不能有任何信息(包括空格,注释)。
- 结束符必须顶格。
字符串长度
一个英文字符,占一个字节。
一个中文gbk字符,占两个字节。
一个中文utf8字符,占三个字节。
求php字符串的长度,有两个函数:
strlen(字符串):求该字符串的“字节数”,也就是占据的字节空间大小。
mb_strlen(字符串):求该字符串的“字符”个数。
需要注意的是,该函数虽为系统函数,但不能直接调用。需要开启php.ini文件里的mbstring模块。
即可。
五、数组类型
1、概念
数组是多个元素的序列集合
- 数组由元素组成
- 数组由下标key和Value组成(键值对)
- 如果元素下标都是数字:索引数组
- 如果元素下标都是字符串:关联数组
- 既有数字又有字符串:混合数组
- 数组元素访问通过下标实现
- 数组通常用来保存一组相关的数据,而不是随意搭配
2、使用步骤
1)定义数组
- 空数组:值为array()或者[]
- 非空多元素数组:[‘张三’,’男’,30]
- 指定下标数组:[‘name’=>’张三’,’gender’=>’男’,’age’=>30]
2)添加元素
- 使用保存数组的变量后加上[],表示一个系统自动指定下标,然后等于某个值。
- 指定下标[index],可以是字符串。
3)访问元素
- 指定元素下标
- 直接使用,表示访问整个数组,但不能用echo输出,数组结构复杂。
4)修改元素
- 通过下标修改即可。
5)删除元素
- 使用unset(),然后指定数组变量加上[1],删除指定下标;或删除整个数组。
6)使用for循环语句遍历数组
数组的指针:每一个数组内部,都有一个指针,正常情况下,指针指向数组的某个单元,起初默认位置是指向第一个单元。
php中,有如下函数,可以针对数组指针进行相应操作。
1 | $arr = array(18,22,12);//定义数组 |
示例
1 | $arr = array("a",2=>"b","C","x"=>"d","e"); |
得到结果(注意下标规则)
1 | 0 ----- a |
3、注意
1、索引数组(纯数字下标)添加元素,默认以当前元素的最大下标开始自动加1.
2、索引数组通常都不会刻意指定下标(从0开始自增长)
3、PHP数组特点
- 数组元素没有数量限制,数组不限定长度
- 数组可以动态增加元素
- 元素的值可以是任何数据类型
4、二维数组
概念:数组中的元素本身也是一个数组。
- 二维数组的元素都是一个一维数组。
- 二维数组的第一维下标通常是索引,第二维是关联。
定义步骤:
1、定义一维数组,保存到变量。
2、定义一个新数组,将原来的数组保存到新数组元素中。
3、数组访问先通过一维下标找到对应的元素,然后通过二维下标找到更深的元素。
1 | #定义一维数组 |
六、类型判定和转换
1、类型判定
概念:即对存储数据的变量(本质是数据)进行类型确定。
PHP提供了一套类型判定的函数,以供使用:
- 函数不需死记硬背,都是is_+数据类型 组成。
- is_int:判断整型
- is_float:判断浮点型
- is_bool:判断布尔型
- is_string:判断字符串型
- is_null:判断空型
- is_array:判断数组型
- is_resource:判断资源型
- is_object:判断对象型
- 函数在操作手册中都有,输入is_即可查看所有。
常用的类型判定:
- is_numeric:判断数据是否是数值,包括数值型数组,
$str='100'
,为true。 - is_scalar:是否是标量(基础类型)数据。
- 类型代表:is_int,是否为整数。
2、类型转换
概念:即将某种不符合的类型转换为目标类型。
- 自动转换:系统自动转换,方便。
- 强制转换:通过代码强制转换成目标类型,效率高。
强制转换实现步骤:
1)明确所需要类型
2)强制转换为所需类型
- 不改变原来数据:在数据前使用(目标类型),如
(int)$a
。 - 改变原来数据:使用settype(变量,’目标类型’),如
settype($a,'bool')
,将变量a的类型转为bool类型。 - 强制转换的类型:资源和NULL类型不能强制转换。
常见的转换逻辑:
1)字符串转为数值
- 纯数字字符串—>相应数值:’123.1’=>123.1
- 数值开头但有字母—>保留数字部分:’12a’=>12
- 小数点开头—>保留第一个小数点及之后的连续数字:’.1.1.a’=>0.1
- 字母开头 —>0:’a123’=>0
2)其他类型转为布尔:极少数转换为FALSE,基本都是TRUE。以下为FALSE的情况。
- 整数0转为布尔
- 浮点数0.0转为布尔
- 空白字符串和字符串 ‘0’ 转为布尔
- 空数组array()转布尔:
- 空类型NULL转布尔