PHP的数据类型可以分为三大类,分别是标量类型、复合类型和特殊类型,不同的类型对应不同的数据存储和使用场景,掌握这些类型是编写正确PHP代码的基础。

一、标量类型
标量类型是PHP中最基础的数据类型,每个标量类型只能存储单个值,包含四种具体类型。
1. 字符串类型(string)
字符串类型用于存储文本数据,可以用单引号、双引号或者heredoc、nowdoc语法定义。单引号内的变量不会被解析,双引号内的变量会被解析,开发时可以根据需求选择定义方式。
<?php // 单引号定义字符串 $name = '张三'; // 双引号定义字符串,变量会被解析 $str1 = "我的名字是$name"; // heredoc语法定义多行字符串 $str2 = <<<EOF 这是第一行内容 这是第二行内容 EOF; echo $str1; // 输出 我的名字是张三 ?>
2. 整型(integer)
整型用于存储整数,支持十进制、八进制(以0开头)、十六进制(以0x开头)表示,整型的取值范围和操作系统位数有关,一般32位系统范围是-2147483648到2147483647,64位系统范围更大。
<?php $num1 = 123; // 十进制整型 $num2 = 0123; // 八进制整型,对应十进制83 $num3 = 0x1A; // 十六进制整型,对应十进制26 echo $num1 + $num2; // 输出 206 ?>
3. 浮点型(float)
浮点型用于存储小数或者极大极小的数值,也叫做双精度类型,浮点型计算可能存在精度误差,涉及金额等精确计算时不建议直接使用浮点型。
<?php $price = 19.99; $count = 3; $total = $price * $count; echo $total; // 输出 59.97 // 浮点型精度问题示例 echo 0.1 + 0.2 == 0.3 ? '相等' : '不相等'; // 输出 不相等 ?>
4. 布尔型(boolean)
布尔型只有两个值,分别是true和false,不区分大小写,常用于条件判断。需要注意部分值被转换为布尔型时会被视为false,比如0、0.0、空字符串、空数组、null等。
<?php
$is_valid = true;
$zero = 0;
if ($zero) {
echo '条件成立';
} else {
echo '条件不成立'; // 会执行这行,因为0转换为布尔型是false
}
?>
二、复合类型
复合类型可以存储多个值或者复杂的数据结构,包含数组、对象、可调用类型三种。
1. 数组(array)
数组是PHP中非常常用的复合类型,可以存储多个任意类型的值,分为索引数组和关联数组,索引数组的键是整数,关联数组的键是字符串。
<?php // 索引数组 $index_arr = [1, 2, 3, 'test']; // 关联数组 $assoc_arr = ['name' => '李四', 'age' => 20, 'score' => 95.5]; echo $index_arr[2]; // 输出 3 echo $assoc_arr['name']; // 输出 李四 ?>
2. 对象(object)
对象是通过类实例化得到的,属于面向对象编程的基础,对象可以包含属性和方法,用于存储更复杂的业务数据。
<?php
// 定义类
class User {
public $name;
public $age;
public function sayHello() {
return "你好,我是{$this->name}";
}
}
// 实例化对象
$user = new User();
$user->name = '王五';
$user->age = 25;
echo $user->sayHello(); // 输出 你好,我是王五
?>
3. 可调用类型(callable)
可调用类型指可以被调用的结构,比如函数名、匿名函数、类方法等,常用于回调函数、事件处理等场景。
<?php
// 定义普通函数
function add($a, $b) {
return $a + $b;
}
// 匿名函数
$sub = function($a, $b) {
return $a - $b;
};
// 调用可调用类型
echo call_user_func('add', 5, 3); // 输出 8
echo call_user_func($sub, 5, 3); // 输出 2
?>
三、特殊类型
特殊类型是PHP中比较特殊的两种数据类型,分别是null和资源类型。
1. NULL类型
NULL类型只有一个值就是null,表示变量没有值,以下情况变量会被赋值为null:被赋值为null、没有被赋值、被unset()函数销毁。
<?php $var1 = null; $var2; echo is_null($var1) ? '是null' : '不是null'; // 输出 是null echo is_null($var2) ? '是null' : '不是null'; // 输出 是null unset($var1); echo is_null($var1) ? '是null' : '不是null'; // 输出 是null ?>
2. 资源类型(resource)
资源类型用于存储外部资源的引用,比如数据库连接、文件句柄、图像画布等,资源类型由特殊函数返回,不能直接操作,使用完之后通常不需要手动销毁,PHP会自动垃圾回收。
<?php
// 打开文件,返回资源类型
$file = fopen('test.txt', 'r');
if (is_resource($file)) {
echo '文件打开成功,资源类型有效';
fclose($file); // 关闭文件资源
}
?>
四、数据类型判断与转换
实际开发中经常需要判断变量的数据类型,或者进行类型转换,PHP提供了对应的函数和方法。
1. 类型判断
可以使用gettype()函数获取变量的类型字符串,也可以使用is_类型名()系列函数判断变量是否属于某个类型,比如is_string()、is_int()等。
<?php $test = 'hello'; echo gettype($test); // 输出 string echo is_string($test) ? '是字符串' : '不是字符串'; // 输出 是字符串 echo is_int($test) ? '是整型' : '不是整型'; // 输出 不是整型 ?>
2. 类型转换
PHP支持自动类型转换和强制类型转换,自动类型转换会在运算时根据上下文自动进行,强制类型转换可以在变量前加括号加类型名实现,比如(int)$var、(string)$var。
<?php $str_num = '123'; $num = (int)$str_num; // 强制转换为整型 echo $num + 5; // 输出 128,自动类型转换将整型和整型相加 $auto_convert = $str_num + 10; // 自动转换,'123'转换为123 echo $auto_convert; // 输出 133 ?>