PHP——PHP的数据类型
PHP一共支持8种原始类型:
1. 4种标量类型
- boolean(布尔型)
- integer(整型)
- float/double(浮点型)
- string(字符串型)
2. 两种复合类型
- array(数组)
- object(对象)
3. 两种特殊类型
- resource(资源)
- NULL。
【注】 PHP 中变量的类型通常不是由程序员设定的,确切的说,是 PHP 根据该变量使用的上下文在运行时决定的。
一. 标量数据类型
类型 | 说明 |
boolean(布尔型) | 只有两个值,真(true)和假(false) |
string(字符串型) | 字符串就是连续的字符序列,可以是计算机所能表示的一切字符的集合 |
integer(整型) | 整型数据类型只能包含整数。这些数据类型可以是正数或负数 |
float(浮点型) | 浮点数据类型用于存储数字,和整型不同的是它有小数位 |
1. 布尔型(boolean)
保存一个 true 值或者 false 值,其中 true 和 false 是 PHP 的内部关键字。设定一个布尔型的变量,只需将 true 或者false 赋值给变量即可。
在 PHP 中不是只有 false 值才为假的,在一些特殊情况下 boolean 值也被认为是 false 。这些特殊情况为:0、0.0、“0”、空白字符串(“”)、只声明没有赋值的数组等。
【注】美元符号 $ 是变量的标识符,所有变量都是以 $ 符开头的,无论是声明变量还是调用变量,都应使用 $ 符。
【例】
<?php
$b = 0;
if($b == true)
echo "<font color='pink' size='+1' >变量为真</font> ";
else
echo "<font color='red' > 变量为假</font>";
?>
2. 字符串型(string)
字符串是连续的字符序列,由数字、字母和符号组成。字符串中的每个字符只占用一个字节。
在 PHP 中,有3种定义字符串的方式,分别是单引号(')、双引号(")和界定符(<<<)。
单引号和双引号是经常被使用的定义方式,定义格式如下:
<?php $a =‘字符串’; ?>
或
<?php $a ="字符串"; ?>
单引号与双引号的区别:
(1)两者的不同之处在于,双引号中所包含的变量会自动被替换成实际数值,而单引号中包含的变量则按普通字符串输出。
(2)对转义字符的使用。使用单引号时,只要对单引号 “ ' ”进行转义即可,但使用双引号(")时,还要注意“ " ” 、“$”等字符的使用。这些特殊字符都要通过转义符“\”来显示。常用的转义字符如下表所示。
\n 和 \r 在 Windows 系统中没有什么区别,都可以当作回车符。但在 Linux 系统中则是两种效果,在 Linux 中,\n 表示换到下一行,却不会回到行首;而 \r 表示光标回到行首,但仍然在本行。
注意:如果对非转义字符使用了“\”,那么在输出时,“\”也会跟着一起被输出。
【例】
<?php
$b = "红尘中你的无上清凉,寂静光明默默照耀世界";
echo " <h3>$b</h3>";
echo '<h4>$b</h4>';
?>
执行结果:
界定符(<<<)在使用时后接一个标识符,然后是字符串,最后是同样的标识符结束字符串。界定符的格式如下:
$string = <<< str要输出的字符串
str
其中 str 为指定的标识符。
注意:结束标识符必须单独另起一行,并且不允许有空格。在标识符前后有其他符号或字符,也会发生错误。
【例】 下面使用界定符输出变量中的值,可以看到,它和双引号没什么区别,包含的变量也被替换成实际数值。<?php
$b = "红尘中你的无上清凉,寂静光明默默照耀世界;";
echo $string = <<<str
<h3>\$b 的内容是: $b<br>
行如风,如君一骑绝尘,空谷绝响,至今谁在倾听;</h3>
str;
?>
3.整型(integer)
整型数据类型只能包含整数。在 32 位的操作系统中,有效的范围是 -2147483648~+2147483647。整型数可以用十进
制、八进制和十六进制来表示。
如果用八进制,数字前面必须加 0;如果用十六进制,则需要加 0x。
注意:如果在八进制中出现了非法数字(8和9),则后面的数字会被忽略掉 。【例3.4】 分别输出八进制、十进制和十六进制的结果。
<?php
$a = 1234567890; //声明一个十进制的整数
$b = 0x1234567890; //声明一个十六进制的整数
$c = o1234567890; //声明一个八进制的整数
$d = 01234567; //声明另一个八进制整数
echo '数字1234567890不同进制的输出结果:<p>';
echo '10进制的结果是:'.$a.'<br>'; //输出10进制整数
echo '16进制的结果是:'.$b.'<br>'; //输出16进制整数
echo '8进制的结果是:<p>';
if($c == $d){ //判断$str3 和$str4的关系
echo 'c = d = '.$c; //如果相等,输出变量值
}
else{
echo 'c != d <br>'; //如果不相等,输出“$str3 != $str4”
}
echo 'c 的结果是:'.$c.'<br>';
echo 'd 的结果是:' .$d;
?>
执行结果:
4.浮点型(float)
浮点数据类型可以用来存储整数,也可以保存小数。它提供的精度比整数大得多。在32位的操作系统中,有效的范围是1.7E-308~1.7E+308。在PHP 4.0以前的版本中,浮点型的标识为double,也叫做双精度浮点数,两者没有区别。
浮点型数据默认有两种书写格式,一种是标准格式:3.1415
-35.8
还有一种是科学记数法格式:
3.58E1
849.72E-3
【例】 输出圆周率的近似值。用3种书写方法:圆周率函数、传统书写格式和科学记数法,最后显示在页面上的效果都一样。
<?php
echo '圆周率的3种书写方法:<p>';
echo '第一种:pi() = '. pi() .'<p>'; //调用pi函数输出圆周率
echo '第二种:3.14159265359 = '. 3.14159265359 .'<p>'; //传统书写格式的浮点数
echo '第三种: 314159265359E-11 = '. 314159265359E-11 .'<p>'; //科学记数法格式的浮点数
?>
执行结果:
注意:浮点型的数值只是一个近似值,所以要尽量避免浮点型数值之间比较大小,因为最后的结果往往是不准确的。
二. 复合数据类型
复合数据类型包括两种,即数组和对象。
类型 | 说明 |
array(数组) | 一组类型相同的变量的集合 |
object(对象) | 对象是类的实例,使用 new 命令来创建 |
1.数组(array)
数组是一组数据的集合,它把一系列数据组织起来,形成一个可操作的整体。数组中可以包括很多数据,如标量数据、数组、对象、资源以及 PHP 中支持的其他语法结构等。
数组中的每个数据称为一个元素,元素包括索引(键名)和值两个部分。元素的索引可以由数字或字符串组成,元素的值可以是多种数据类型。
定义数组的语法格式如下:
$array = ('value1',' value2 '……)或
$array[key] = 'value'
或
$array = array(key1 => value1, key2 => value2……)
其中,参数 key 是数组元素的下标,value 是数组下标所对应的元素。以下几种都是正确的格式:
$arr1 = array('This','is','a','example');$arr2 = array(0 => 'php', 1=>'is', 'the' => 'the', 'str' => 'best ');
$arr3[0] = 'tmpname';
声明数组后,数组中的元素个数还可以*更改。只要给数组赋值,数组就会自动增加长度。
<?php
$arr = array(0 => 1,1=>2, 'hi' => 'hello');
$arr[2]='zth';
echo $arr[0]."<br>";
echo $arr['hi'].": ".$arr[2];
?>
执行结果:
2.对象(object)
编程语言所应用到的方法有两种:面向过程和面向对象。在 PHP 中,用户可以*使用这两种方法。三. 特殊数据类型
特殊数据类型包括资源和空值两种。
类型 | 说明 |
resource(资源) | 资源是一种特殊变量,又叫做句柄,保存到外部资源的一个引用。资源是通过专门的函数来建立和使用的 |
null(空值) | 特殊的值,表示变量没有值,唯一的值就是null |
2.空值(null)
空值,表示没有为该变量设置任何值,另外,空值(null)不区分大小写,null 和 NULL 效果是一样的。
被赋予空值的情况有以下3种:还没有赋任何值、被赋值 null、被 unset() 函数处理过的变量。
【例】 下面来看一个具体实例。字符串 string1 被赋值为 null,string2 根本没有声明和赋值,所以也输出 null,最后的string3 虽然被赋予了初值,但被 unset() 函数处理后,也变为 null 型。unset() 函数的作用就是从内存中删除变量。
<?php
echo "变量(\$string1)直接赋值为null:";
$string1 = null; //变量$string1被赋空值
$string3 = "str"; //变量$string3被赋值str
if(!isset($string1)) //判断$string1是否被设置
echo "string1 = null";
echo "<p>变量(\$string2)未被赋值:";
if(!isset($string2)) //判断$string2 是否被设置
echo "string2 = null";
echo "<p>被unset()函数处理过的变量(\$string3):";
unset($string3); //释放$string3
if(!isset($string3)) //判断$string3是否被设置
echo "string3 = null";
?>
执行结果:
四. 数据类型转换
1. 自动转换
- 布尔型数据和数值型数据在进行算术运算时,TRUE 被转换为整数1,FALSE 被转换为整数 0。
- 字符串型数据和数值型数据在进行算术运算时,如果字符串以数字开头,将被转换为相应的数字;如果字符串不是以数字开头,将被转换为整数0。
- 在进行字符串连接运算时,整数、浮点数将被转换为字符串型数据,布尔值 TRUE 将被转换为字符串"1",布尔值 FALSE 和 NULL 将被转换为空字符串 ""。
- 在进行逻辑运算时,整数0、浮点数0.0、 空字符串""、字符串"0"、NULL 以及空数组将被转换为布尔值 FALSE, 其他数据将被转换为布尔值TRUE。
【例】
<?php
$a = true;
$b = false;
$c = "100abc";
$d = "abc100";
$e = 100;
var_dump($a + $e);
echo "<br>";
var_dump($b + $e);
echo "<br>";
var_dump($c+$e);
echo "<br>";
var_dump($d+$e);
echo "<br>";
var_dump($a.$e);
echo "<br>";
var_dump($b.$e);
echo "<br>";
var_dump($a && $e);
echo "<br>";
var_dump($b && $e);
echo "<br>";
?>
执行结果:
E:\wamp64\www\mr\zth\test.php:27:int 101
E:\wamp64\www\mr\zth\test.php:29:int 100
E:\wamp64\www\mr\zth\test.php:31:int 200
E:\wamp64\www\mr\zth\test.php:33:int 100
E:\wamp64\www\mr\zth\test.php:35:string '1100' (length=4)
E:\wamp64\www\mr\zth\test.php:37:string '100' (length=3)
E:\wamp64\www\mr\zth\test.php:39:boolean true
E:\wamp64\www\mr\zth\test.php:41:boolean false
2. 强制转换
a. 用括号括起来的类型名称进行转换
转换操作符 | 转换类型 | 举例 |
(boolean) | 转换成布尔型 | (boolean)$num、(boolean)$str |
(string) | 转换成字符型 | (string)$boo、(string)$flo |
(integer) | 转换成整型 | (integer)$boo、(integer)$str |
(float) | 转换成浮点型 | (float)$str、(float)$str |
(array) | 转换成数组 | (array)$str |
(object) | 转换成对象 | (object)$str |
注意:在进行类型转换的过程中应该注意以下内容:
转换成 boolean 型时,null、0 和未赋值的变量或数组会被转换为false,其他的为真;
转换成整型时,布尔型的 false 转换为 0,true 转换为 1,浮点型的小数部分被舍去,字符型如果以数字开头就截取到非数字位,否则输出0。
【例】
<?php
$str = "HELLO WORLD ";
echo "原始的 string 形式:".$str;
echo "<p>";
echo "这是boolean形式: ".(boolean)$str;
echo "<p>";
echo "这是integer形式: ".(integer)$str;
echo "<p>";
echo "这是float形式: ".(float)$str;
?>
执行结果:
原始的 string 形式:HELLO WORLD
这是boolean形式: 1
这是integer形式: 0
这是float形式: 0
b. 使用以 val 结尾的函数名的函数
函数名 | 语法格式 | 返回值 |
intval | int intval( mixed var) | 返回 var 的整数值 |
float | float floatval( mixed var) | 返回 var 的浮点数值 |
strval | string strval( mixed var) | 返回 var 的字符串值 |
<?php
$str = "123.456abc";
var_dump(intval($str));
echo "<br>";
var_dump(floatval($str));
echo "<br>";
var_dump(strval($str));
echo "<br>";
?>
执行结果:
E:\wamp64\www\mr\zth\test.php:23:int 123
E:\wamp64\www\mr\zth\test.php:25:float 123.456
E:\wamp64\www\mr\zth\test.php:27:string '123.456abc' (length=10)
c. 使用 settype() 函数
语法格式:
bool settype ( mixed var, string type )
参数 var 为指定的变量,参数 type 为指定的类型,参数 type 有7个可选值,即 boolean、float、integer、array、null、object 和 string 。如果转换成功则返回 true,否则返回 false。 当字符串转换为整型或浮点型时,如果字符串是以数字开头的,就会先把数字部分转换为整型,再舍去后面的字符串;如果
数字中含有小数点,则会取到小数点前一位
【例】
<?php
$str = "123.456abc";
$int = 100;
$boo = true;
settype($str,"integer");
var_dump($str);
echo "<br>";
settype($int,"boolean");
var_dump($int);
echo "<br>";
settype($boo,"string");
var_dump($boo);
?>
执行结果:
E:\wamp64\www\mr\zth\test.php:26:int 123
E:\wamp64\www\mr\zth\test.php:29:boolean true
E:\wamp64\www\mr\zth\test.php:32:string '1' (length=1)
五. 检测数据类型
PHP内置了检测数据类型的系列函数,可以对不同类型的数据进行检测,判断其是否属于
某个类型,如果符合则返回true,否则返回false。
函数 | 检测类型 | 举例 |
is_bool | 检查变量是否是布尔类型 | is_bool(true)、is_book(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 | 检查变量是否为null | is_null(null) |
is_array | 检查变量是否为数组类型 | is_array($arr) |
is_object | 检查变量是否是一个对象类型 | is_object($obj) |
is_numeric | 检查变量是否为数字或由数字组成的字符串 | is_numeric('5')、is_numeric('bccd110') |
【例】
<?php
$a = true;
$b = "Hello World ";
$c = 123456;
echo "变量 a 是否为布尔型: ".is_bool($a)."<br>";
echo "变量 b 是否为字符串型: ".is_string($b)."<br>";
echo "变量 c 是否为整型: ".is_int($c)."<br>";
echo "变量 c 是否为f浮点型: ".is_float($c)."<br>";
?>
执行结果:
变量 a 是否为布尔型: 1
变量 b 是否为字符串型: 1
变量 c 是否为整型: 1
变量 c 是否为f浮点型:
【注】结果为 true 时,页面返回 1。结果为 false 时,页面无返回。上一篇: Java-数据类型及转换
下一篇: 数据结构算法-插入排序