1. PHP 数据类型
PHP的数据类型主要分为三大类:
- 标量数据类型
- String(字符串)
- Integer(整型)
- Float(浮点型)
- Boolean(布尔型)
- 复合数据类型
- Array(数组)
- Object(对象)
- 特殊数据类型
- resource(资源)
- NULL(空值)
标量数据类型是数据结构中最基础的单元,只能存储一个数据。
1.1. String(字符串)
字符串是由连续的字母、数字或字符组成的字符序列。
PHP提供了4种表示字符串的方式,分别为单引号、双引号、heredoc语法结构和nowdoc语法结构(定界符<<<)。
① 单引号和双引号区别如下。
- ""双引号里面的变量会经过编译器解析,然后再输出。
- ''单引号里面的变量不进行解析,直接输出,因此单引号比双引号执行得要快了。
例如:
$number= 100;
echo '$number=', $number; //结果是:$number=100
echo "$number=", $number; //结果是:100=100
说明
: 在定义字符串时,如果没有特别的要求,应尽量使用单引号。
- 对转义字符的使用
双引号中可以通过“\”转义符输出的特殊字符如下:
转义序列 | 字符 |
---|---|
\n | 换行符 |
\r | 回车符 |
\t | 制表符Tab |
\\ | 反斜杠 |
\$ | 美元符号 |
\" | 双引号 |
单引号中可以通过“\”转义符输出的特殊字符只有:
转义序列 | 字符 |
---|---|
\\ | 反斜杠 |
\' | 单引号 |
②heredoc和nowdoc语法结构(定界符<<<)
heredoc和nowdoc的语法结构都是:
以“<<<”开始,
后面紧跟开始标识符名称,
结束时所引用的标识符名称与开始标识符名称要相同,以分号结尾。
<<<STR
//内容
STR;
heredoc和nowdoc结构的使用具有以下几个特点:
- 开始标记和结束标记使用相同的字符串,通常以大写字母来写。
- 开始标记后不能出现空格或多余的字符。
- 结束标记必须顶头写,不能有缩进和空格。
- heredoc结构中的变量会被解析,变量不需要用连接符“.”来拼接。
heredoc和nowdoc结构的语法区别是:
- 开始标识符名称,heredoc没有引号,nowdoc必须要使用单引号进行包裹。
- heredoc结构中的变量会被解析,类似双引号;nowdoc结构中的变量会被原样输出,类似单引号。
<?php
$name = 'PHP';
$heredoc = <<<EOD
<p>$name 是世界上最好的语言!</p>
EOD;
echo $heredoc; //输出:PHP 是世界上最好的语言!
$nowdoc = <<<'EOD'
<p>$name 是世界上最好的语言!</p>
EOD;
echo $nowdoc; //输出:$name 是世界上最好的语言!
?>
字符串操作详细见字符串章节。
1.2. Integer(整型)
整型数据只能包含整数。
整型数据的规则是:
- 整型数据必须至少有一个数字(0~9)。
- 整型数据不能包含逗号或空格。
- 整型数据没有小数点。
- 整型数据可以是正数或负数。
整型数据可以用3种格式来指定,
即十进制、十六进制(前缀为0x)和八进制(前缀为0)。
$oct = 012; //八进制
$dec = 10; //十进制
$hex = 0xa; //十六进制
注意,在PHP 7版本中,含有十六进制字符的字符串不再被视为数字,而是当作普通的字符串。
1.3. Float(浮点型)
浮点型数据既可以用来存储整数,也可以用来存储小数和指数。
<?php
$num = 3.14;
?>
1.4. Boolean(布尔型)
布尔型数据只有两个,即true和false,布尔型变量通常用于条件判断语句中。
其他的数据类型基本都有布尔属性:
数据类型 | true | false |
---|---|---|
整型 | 非0 | 0 |
浮点型 | 非0 | 0.0 |
字符串型 | 非空非零 | ''空字符串或'0'字符串 |
数组型 | 包括元素 | 不含任何元素 |
对象型 | 永远为true | |
资源型 | 永远为true | |
NULL型 | 永远为false |
1.5. Array(数组)
数组是一系列数据集合起来形成的一个可操作的整体,一系列数据可以包括标量数据、对象、资源以及PHP中支持的其他语法结构等。
一般把数组中的单个数据称为元素,元素又被分为索引(键名)和值两部分。
索引(键名)可以是数字或者字符串,值可以是任何数据类型。
在PHP中,通常使用array()创建数组或直接赋值。准确来说,array()是一种结构而不是一个函数,具体格式如下:
$array1 = array('val1','val2','val3'...);
$array2 = array(key1 => 'val1', key2 => 'val2', key3 => 'val3',...);
$array[key1] = 'val1';
数组具体详细见数组章节。
1.6. Object(对象)
编程语言所应用到的方法有两种:面向过程和面向对象。在PHP中,用户可以自由使用这两种方法。
对象数据类型也可以用于存储数据。在PHP中,对象必须声明。首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。然后在类中定义数据类型,在实例化的类中使用数据类型。
1.7. resource(资源)
资源是一种特殊的变量类型,又叫作句柄,它是通过专门的函数来创建和使用的。资源可以被进行操作,如创建、使用和释放等。任
何资源,在不需要的时候都应该被及时释放。系统也会自动启用垃圾回收机制,在页面执行完毕后回收资源,以避免内存被消耗殆尽。
在编程过程中,资源类型却是几乎永远接触不到的。
1.8. NULL(空值)
空值,顾名思义,表示没有为该变量设置任何值。
被赋予空值的情况有以下3种:
- 还没有赋任何值
- 被赋值null
- 被unset()函数处理过的变量。
1.9. 数据类型检测
PHP内置了检测数据类型的系列函数,可以对不同类型的数据进行检测,判断其是否属于某个类型,如果符合则返回true,否则返回false。
检测数据类型的函数如表:
函数 | 检测类型 | 举例 |
---|---|---|
is_bool() | 是否为布尔类型 | is_bool(srue) , is_bool(false) |
is_string() | 是否为字符串型 | is_string(‘string’) , is_string(1234) |
is_float()/is_double() | 是否为浮点型 | is_float(3.1415) , is_float(‘3.1415’) |
is_integer()/is_int() | 是否为整型 | is_integer(34) , is_integer(‘34’) |
is_null() | 是否为空值 | is_null(null) |
is_array() | 是否为数组 | is_array($arr) |
is_object() | 是否为一个对象 | is_object($obj) |
is_numeric() | 是否为数字或由数字组成的字符串 | is_numeric(‘5’) , is_numeric(‘bcc110’) |
<?php
$boo = '0123456';
if(is_numeric($boo))
echo 'yes!';
else
echo 'no!';
?>
1.10. 数据类型获取
1.如果想查看某个表达式的值和类型,用var_dump()。
2.如果只是想得到一个易读懂的类型的表达方式用于调试,用 getType()。
3.要查看某个类型,不要用 gettype(),而用is_type() 函数。
1.11. 数据类型转换
PHP虽然是弱类型语言,但有时也需要用到类型转换。在PHP数据类型的转换主要有以下2种转换方式。
1.11.1. 自动类型转换
所谓自动类型转换,指的是当运算需要或与期望的结果类型不匹配时,PHP将自动进行类型转换,无需开发人员做任何操作。
在程序开发过程中,最常见的自动类型转换有3种,分别为转换成布尔型、转换成整型和转换成字符串型。在各个类型进行自动转换时需要注意以下几点。
- 转换成布尔类型值时,null,整型值0、浮点型值0.0、空字符串以及字符串“0”都会被转为false,其他值会被转为true。
- 布尔型转换成整型时,布尔值true转换成整数1;布尔值false转换成整数0。
- 浮点数转换成整数时,小数部分去掉,将向下取整。
- 字符串型转换为整型时,若字符串是以数字开始,则使用该数值,否则转换为0。
- 布尔型转换成字符串时,布尔值true转换成字符串“1”;布尔值false转换成空字符串。
- 整型或浮点型转换成字符串时,直接将数字转换成字符串形式。
1.11.2. 强制类型转换
所谓强制类型转换,就是在编写程序时手动转换数据类型,主要有以下三种转换方式。
1)在要转换的变量之前加上用括号括起来的目标类型。这种方法只需在变量前面加上用括号括起来的类型名称即可,允许转换的类型如表:
函数 | 检测类型 | 举例 |
---|---|---|
(int),(integer) | 转换成整型 | (int)boo |
(bool),(boolean) | 转换成布尔 | (bool)str |
(float),(double),(real) | 转换成浮点 | (float)$str |
(string) | 转换成字符 | (string)$boo |
(array) | 转换成数组 | (array)$str |
(object) | 转换成对象 | (object)$str |
2)使用三个具体类型的转换函数,intval()、floatval()、strval()。其中,intval()函数用于转换为整型,floatval()函数用于转换为浮点型,strval()函数用于转换为字符型。
3)使用函数settype()进行转换。settype()函数用于设置变量的数据类型,该函数可以将指定的变量转换成指定的数据类型。
bool settype (mixed $var,string type)