PHP 数据类型
数据类型
PHP 支持 10 种原始数据类型。
四种标量类型:
- bool(布尔型)
- int(整型)
- float(浮点型,也称作 double)
- string(字符串)
四种复合类型:
- array(数组)
- object(对象)
- callable(可调用)
- iterable(可迭代)
最后是两种特殊类型:
- resource(资源)
- NULL(无类型)
变量的类型通常不是由程序员设定的,确切地说,是由 PHP 根据该变量使用的上下文在运行时决定的。
整型
在 PHP 中,整型变量称为 integer 或 int 类型,用来表示一个整数,整型的规则如下所示:
- 整数必须至少有一个数字 (0-9)
- 整数不能包含逗号或空格
- 整数是没有小数点的
- 整数可以是正数或负数
整型的取值范围必须介于 -2E31 到 2E31 之间,可以用三种格式来表示,即十进制、十六进制(以 0x 为前缀)和八进制(以 0 为前缀)。
示例
在以下实例中我们将测试不同类型的整型数字。
PHP var_dump() 函数返回变量的数据类型和值:
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // 负数
var_dump($x);
echo "<br>";
$x = 0x8C; // 十六进制数
var_dump($x);
echo "<br>";
$x = 047; // 八进制数
var_dump($x);
?>
运行上面的代码,结果如下:
int(5985)
int(-345)
int(140)
int(39)
注意,在 PHP7 版本中,含有十六进制字符的字符串不再被视为数字,而是当作普通的字符串。
示例
<?php
var_dump("0x123" == "291");
echo "<br/>";
var_dump(is_numeric("0x123"));
echo "<br/>";
var_dump("0xe" + "0x1");
?>
运行上面的代码,在 PHP5 中的输出结果如下:
bool(true)
bool(true)
int(15)
在 PHP7 中的输出结果如下:
bool(false)
bool(false)
int(0)
浮点型
浮点型(也叫浮点数 float,双精度数 double 或实数 real)可以用以下任一语法定义:
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
$d = 1_234.567; // 从 PHP 7.4.0 开始支持
?>
浮点数的字长和平台相关,尽管通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式)。
字符串
一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。
在 32 位版本中,string 最大可以达到 2GB
在 PHP 中,定义字符串有三种方式,分别是单引号方式、双引号方式、Heredoc 方式。
示例
<?php
//双引号方式声明字符串
$str1 = "迹忆客";
//单引号方式声明字符串
$str2 = 'PHP 教程';
//Heredoc 方式声明字符串
$str3 = <<<EOF
url:
https://www.jiyik.com/w/YgDt38632
EOF;
echo $str1."<br>".$str2."<br>".$str3;
?>
运行结果如下
迹忆客
PHP 教程
url: https://www.jiyik.com/w/YgDt38632
布尔型
布尔型只有两种值,分别是 TRUE 和 FALSE(不区分大小写),意为逻辑真和逻辑假。
示例
<?php
$x = True;
$y = faLsE;
var_dump($x, $y);
?>
运行结果如下:
bool(true) bool(false)
数组
数组是一组数据的集合,是将数据按照一定规则组织起来形成的一个整体。数组的本质是存储管理和操作一组变量。按照数组的维度划分,可以有一维数组、二维数组和多维数组。我们可以使用 array() 函数来创建数组。
示例
<?php
$arr = array('website' => '迹忆客', 'url' => 'https://www.jiyik.com/');
echo "<pre>"; // <pre> 是一个 HTML 标签,用来格式化输出内容
var_dump($arr);
?>
运行结果如下:
array(2) {
["website"]=>
string(16) "迹忆客"
["url"]=>
string(23) "https://www.jiyik.com/"
}
在接下来的章节中你将学到更多关于数组的知识。
对象
对象数据类型也可以用于存储数据。
在 PHP 中,对象必须声明。
首先,你必须使用class关键字声明类对象。类是可以包含属性和方法的结构。
然后我们在类中定义数据类型,然后在实例化的类中使用数据类型:
示例
<?php
class Car
{
var $color;
function Car($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
function print_vars($obj) {
foreach (get_object_vars($obj) as $prop => $val) {
echo " $prop = $val
";
}
}
// instantiate one object
$herbie = new Car("white");
// show herbie properties
echo "herbie: Properties
";
print_vars($herbie);
?>
运行结果如下
herbie: Properties color = white
以上实例中PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
你将会在接下来的章节中学会更多关于对象的知识。
NULL
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据:
示例
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
资源
资源(Resource)在 PHP 中同样是一种特殊的数据类型。它主要描述一个 PHP 的扩展资源,例如一个数据库查询(Query)、一个打开的文件句柄(fopen)或一个数据库连接(Database Connection)以及字符流(stream)等扩展类型。
但是我们并不能直接操作这个变量类型,只能通过专门的函数来使用。
如果上面所说的某一种情况出现时,例如使用 fopen 函数打开一个本地文件时
示例
<?php
header("content-type:text/html;charset=utf-8");//设置编码,解决中文乱码
$file = fopen("test.txt", "rw");//打开test.txt文件
var_dump($file);
?>
运行结果如下:
resource(3) of type (stream)
资源是 PHP 提供的较强特性之一,它可以在 PHP 脚本中做自定义的扩展,类似于C语言结构中的引用,它的所有属性都是私有的,大家可以暂时将其理解为面向对象中的一个实例化对象。有关资源类型我们后面还会详细介绍。