PHP 是弱类型语言,变量不需要提前声明类型,但掌握它的数据类型仍然非常重要。本文梳理 PHP 的八种主要数据类型及使用要点。
数据类型总览
PHP 共有八种数据类型,分为三类:
- 标量类型:
boolean(布尔型)、integer(整型)、float(浮点型,也叫double)、string(字符串) - 复合类型:
array(数组)、object(对象) - 特殊类型:
null(空)、resource(资源)
标量类型
布尔型
只有 true 和 false 两个值,不区分大小写:
$flag = true;
$off = FALSE;
以下值在转换为布尔时会被视为 false:
false、0、0.0- 空字符串
""和字符串"0" - 不包含任何元素的空数组
NULL- 从没有任何标签的空
SimpleXML对象创建的值
整型
$dec = 123; // 十进制
$oct = 0123; // 八进制,以 0 开头
$hex = 0x1A; // 十六进制,以 0x 开头
$bin = 0b1010; // 二进制,以 0b 开头
注意整数的取值范围与平台有关,32 位系统通常是 -2^31 到 2^31 - 1,超出范围会自动转为浮点型。
浮点型
$price = 19.99;
$sci = 1.2e3; // 科学计数法
浮点数只是近似表示,不要用 == 直接比较两个浮点数,推荐比较差值是否小于一个很小的阈值:
if (abs($a - $b) < 0.00001) {
// 认为相等
}
字符串
单引号和双引号的行为不同:
$name = 'Tom';
echo 'Hello, $name'; // 输出 Hello, $name,不解析变量
echo "Hello, $name"; // 输出 Hello, Tom,解析变量
- 单引号内只有
\'和\\两个转义有效 - 双引号支持
\n、\t、\$等转义以及变量解析 - 长文本推荐使用 heredoc 或 nowdoc 语法
$text = <<<EOT
这是一段多行文本,可以解析 $name 变量。
EOT;
复合类型
数组
PHP 的数组同时可以当作列表和字典使用:
// 索引数组
$arr = [1, 2, 3];
// 关联数组
$user = [
'name' => 'Tom',
'age' => 18,
];
echo $user['name']; // Tom
对象
通过类实例化得到:
class Person {
public $name;
public function sayHi() {
echo "Hi, {$this->name}";
}
}
$p = new Person();
$p->name = 'Tom';
$p->sayHi();
特殊类型
NULL
表示一个变量没有值,以下情况变量的值为 NULL:
- 直接赋值为
NULL - 尚未被赋值
- 被
unset()释放
$a = null;
var_dump(is_null($a)); // bool(true)
资源
resource 保存到外部资源的引用,例如文件句柄、数据库连接等:
$fp = fopen('test.txt', 'r'); // 打开文件返回资源
fclose($fp); // 用完记得释放
类型检测与转换
检测类型常用函数:
var_dump($var); // 输出类型和值
is_int($var); // 是否整型
is_string($var); // 是否字符串
is_array($var); // 是否数组
is_null($var); // 是否为 NULL
gettype($var); // 返回类型名称字符串
类型转换:
$num = (int) "123"; // 强制转换为整型
$str = strval(123); // 转字符串
$int = intval("456"); // 转整型
$float = floatval("1.5"); // 转浮点型
小结
- 标量类型注意浮点数比较陷阱和单双引号差异
- 数组是 PHP 中最灵活的结构,索引与关联通用
- 判断变量状态时区分
isset()、empty()与is_null() - 资源类型用完记得释放,避免句柄泄漏
理解好这些基础类型,对后续学习函数参数、表单验证和数据库操作都很有帮助。