PHP 基本数据类型

上篇教程,学院君给大家介绍了 PHP 中变量和常量的声明和使用,并且提到,PHP 是弱类型语言,在声明变量时,无需指定类型,变量值对应的数据类型会在运行时进行判断,所以虽然无需指定类型,但实际上还是有类型的,只不过这个判定工作交给了 PHP 底层引擎完成,这是以牺牲程序性能为代价换取开发效率和语言的简单性,所有的弱类型解释型语言,比如 Python、JavaScript 都是这么做的。

今天学院君就来系统给大家介绍下 PHP 支持的所有基本数据类型。

字符串类型

由于之前的所有示例都是围绕字符串展开,所以我们从字符串切入。

字符串类型定义

在 PHP 中,字符串可以通过单引号或者双引号定义,假设「Laravel 精品课」是一本书,这本书的书名和作者可以通过字符串类型变量进行定义,在 php_learning/basic 目录下新建一个 type.php 来存放本教程编写的代码,初始化书名和作者变量如下:

<?php

$name = "Laravel 精品课";
$author = '学院君';

字符串类型判断

要判断变量数据类型是否是字符串,可以借助 is_string 函数:

if (is_string($name)) {
    echo '$name 是字符串' . PHP_EOL;
}

if (is_string($author)) {
    echo '$author 也是字符串' . PHP_EOL;
}

exit();

我们这里使用了 if 语句对变量是否是字符串类型进行判断(关于 if 语句后面会介绍),最后通过 exit() 手动退出程序。上述代码执行结果如下:

-w518

另外,如果是查看变量类型,还可以通过更简单的方式,那就是通过 var_dump 函数打印变量:

var_dump($name);
var_dump($author);

打印结果如下:

-w626

该方法会直接在打印结果中显示打印变量的类型和长度(一个中文字符长度是 3 个字节)。

单引号与双引号的区别

通过上述代码还可以看到单引号字符串中引用变量不会对变量值进行解析,如果是双引号,则会对引用变量值进行解析:

if (is_string($name)) {
    echo "\"$name\" 是字符串" . PHP_EOL;
}

if (is_string($author)) {
    echo "'$author' 也是字符串" . PHP_EOL;
}

此外,由于我们在双引号字符串中引入了双引号,所以需要通过转义符 \ 对其进行转转义才能正常输出,双引号字符串中引用单引号则不需要转义,上述代码的执行结果如下:

-w525

由于双引号字符串会尝试对其中包含的 PHP 变量进行值解析,所以性能比单引号字符串差一些,因此日常可以用单引号字符串的地方,尽量用单引号字符串,除非某些场景必须使用双引号字符串,比如像上面那样包含转移字符(以 \ 开头的字符,比如 \n\"\t 等)或者包含单引号,单引号字符串不支持转义字符(\'除外),这一点需要注意。

当然,对于单引号字符串也可以实现类似上面双引号字符串的功能,只是编写起代码来更麻烦一些,可读性更差一些:

if (is_string($name)) {
    //echo "\"$name\" 是字符串" . PHP_EOL;
    echo '"' . $name . '" 是字符串' . PHP_EOL;
}

if (is_string($author)) {
    //echo "'$author' 也是字符串" . PHP_EOL;
    echo '\'' . $author . '\' 是字符串' . PHP_EOL;
}

数字类型

除了字符串类型之外,PHP 还支持数字类型,数字类型包括两部分:整型和浮点型。

整型

在 PHP 中,整型类型没有位数之分,所有的整型都统归 int/integer 类型,并且不支持无符号整型。

还是以上面的「Laravel 精品课」这本书为例,该书的发布时间是 2020 年,年份显然是一个整型数据,我们可以这样定义这个整型变量:

$publish_at = 2020;

然后通过 var_dump 函数查看其数据类型:

var_dump($publish_at);

打印结果如下:

int(2020)

注:也可以像字符串那样通过 is_int/is_integer 来判断,不再重复演示了。

包含了数据类型 int 和整型值,和字符串不同,不再包含数据长度,对于整型而言,也没有必要,因为整型长度是固定的,对于目前最新版的 PHP 7.x 而言,可以通过 PHP_INT_MINPHP_INT_MAX 这两个内置常量查看当前系统 PHP 整型值的最小值和最大值:

echo "当前系统 PHP 整型有效值范围: " . PHP_INT_MIN . '~' . PHP_INT_MAX;

Mac/Windows 系统输出结果一致:

当前系统 PHP 整型有效值范围: -9223372036854775808~9223372036854775807

这个值的范围用二进制表示就是是 263~263-1 次方,也就是 8 个字节长度。

浮点型

对于小数或者超出整型值范围的数据,可以通过浮点型数据表示,浮点型又可以细分为 float(单精度)和 double(双精度),后者精度更高,能表示的数据范围也更大,但是会占据更多内存,运算速度也更慢。

PHP 中默认的浮点型是 float,以「Laravel 精品课」为例,该书的价格可以用浮点型表示:

$price = 99.00;
var_dump($price);

通过 var_dump 打印结果是:

float(99)

注:当然,也可以通过 is_float/is_double 这种函数进行类型判断。

使用浮点型的时候需要注意,浮点型的精度是近似计算,因为对于确定的十进制小数而言,使用二进制永远无法精确表示,所以不能直接对浮点型进行相等比较,因为即使字面上(十进制)相等,实际底层处理后的二进制数据并不相等,关于这一点,我们在后续介绍比较运算符时会简单介绍,或者你可以参考官方文档的示例

布尔类型

最后是布尔类型,布尔类型非常简单,就是真值判断,只有两个值:truefalse,前者表示条件为真,后者表示条件为假,布尔类型的常见使用场景就是控制结构中的条件表达式。

这里,我们先简单介绍下它的基本定义和使用,还是以「Laravel 精品课」为例,我们可以将是否出版通过布尔类型进行定义:

$published = false;
var_dump($published);

打印结果是:

bool(false)

如果将 $published 赋值为 true,则对应的打印结果是 bool(true)bool 表示布尔类型,括号中的值表示对应的布尔类型值。当然,你也可以通过 is_bool 函数判断某个变量是否是布尔类型,这里就不再单独演示了。

基本数据类型之间的转化

PHP 支持以上基本数据类型之间的转化,只需要在变量名前通过添加 (目标转化类型) 强制转化即可:

$str = "123";
$int = 2020;
$float = 99.0;
$bool = false;

var_dump((int) $str);
var_dump((bool) $str);
var_dump((string) $str);
var_dump((bool) $str);
var_dump((int) $float);
var_dump((string) $float);
var_dump((string) $bool);
var_dump((int) $bool);

打印结果如下:

-w497

非常简单,你可以自行进行更多类型转化测试,或者参考官方文档了解更多细节,这里不再深入展开。

以上就是 PHP 中基本数据类型的定义和使用示例,非常简单,下篇教程,我们继续探索 PHP 中最强大的数据类型 —— 数组。

上一篇: PHP 变量与常量

下一篇: PHP 数组:索引数组与关联数组