PHP 数据类型详解:八种类型与使用要点

· PHP笔记 PHP 入门笔记 · 4 阅读 · 约 5 分钟

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()
  • 资源类型用完记得释放,避免句柄泄漏

理解好这些基础类型,对后续学习函数参数、表单验证和数据库操作都很有帮助。