Skip to content

4.4 数据类型:字符串、整数、浮点数、布尔、数组、null

PHP 是一种弱类型语言,但它仍然支持多种数据类型。本文将介绍 PHP 中常见的数据类型及其使用方法。

1. 字符串 (string)

字符串是 PHP 中最常用的数据类型之一,用于存储文本数据。

1.1 定义字符串

php
// 单引号字符串
$str1 = 'Hello, World!';

// 双引号字符串
$str2 = "Hello, World!";

// 定界符字符串
$str3 = <<<EOD
This is a
multiline string
EOD;

// 现在文档(PHP 5.3+)
$str4 = <<<'EOD'
This is a
multiline string
EOD;

1.2 字符串操作

php
// 字符串连接
$str1 = "Hello, ";
$str2 = "World!";
$str3 = $str1 . $str2; // "Hello, World!"

// 字符串长度
$length = strlen($str3); // 13

// 字符串查找
$pos = strpos($str3, "World"); // 7

// 字符串替换
$new_str = str_replace("World", "PHP", $str3); // "Hello, PHP!"

// 字符串截取
$sub_str = substr($str3, 0, 5); // "Hello"

// 字符串转换
$lower = strtolower($str3); // "hello, world!"
$upper = strtoupper($str3); // "HELLO, WORLD!"

1.3 字符串插值

php
// 双引号中的变量插值
$name = "John";
echo "Hello, $name!"; // "Hello, John!"

// 复杂表达式插值
echo "1 + 2 = ${1 + 2}"; // "1 + 2 = 3"

// 数组元素插值
$user = ["name" => "John"];
echo "Hello, {$user['name']}!"; // "Hello, John!"

2. 整数 (int)

整数是没有小数部分的数字。

2.1 定义整数

php
// 十进制整数
$int1 = 123;

// 十六进制整数
$int2 = 0x7B; // 123

// 八进制整数
$int3 = 0173; // 123

// 二进制整数
$int4 = 0b1111011; // 123

2.2 整数范围

  • PHP_INT_MIN:最小整数
  • PHP_INT_MAX:最大整数
  • PHP_INT_SIZE:整数大小(字节)
php
echo PHP_INT_MIN; // 输出最小整数
echo PHP_INT_MAX; // 输出最大整数
echo PHP_INT_SIZE; // 输出整数大小

3. 浮点数 (float)

浮点数是带有小数部分的数字。

3.1 定义浮点数

php
// 普通浮点数
$float1 = 123.45;

// 科学计数法
$float2 = 1.2345e2; // 123.45
$float3 = 1.2345e-2; // 0.012345

3.2 浮点数精度

php
// 浮点数精度问题
$a = 0.1;
$b = 0.2;
$c = $a + $b;
echo $c; // 可能输出 0.30000000000000004

// 解决方法
$c = round($a + $b, 1);
echo $c; // 输出 0.3

4. 布尔值 (bool)

布尔值表示真或假。

4.1 定义布尔值

php
$bool1 = true;
$bool2 = false;

4.2 布尔转换

以下值会被转换为 false

  • false
  • 0(整数)
  • 0.0(浮点数)
  • ""(空字符串)
  • "0"(字符串 "0")
  • null
  • array()(空数组)

其他值都会被转换为 true

php
// 布尔转换示例
var_dump((bool) 0); // bool(false)
var_dump((bool) ""); // bool(false)
var_dump((bool) "0"); // bool(false)
var_dump((bool) null); // bool(false)
var_dump((bool) array()); // bool(false)

var_dump((bool) 1); // bool(true)
var_dump((bool) "hello"); // bool(true)
var_dump((bool) array(1)); // bool(true)

5. 数组 (array)

数组是一种复合数据类型,可以存储多个值。

5.1 定义数组

php
// 索引数组
$arr1 = array(1, 2, 3, 4, 5);
// 或
$arr1 = [1, 2, 3, 4, 5];

// 关联数组
$arr2 = array(
    "name" => "John",
    "age" => 30,
    "email" => "john@example.com"
);
// 或
$arr2 = [
    "name" => "John",
    "age" => 30,
    "email" => "john@example.com"
];

// 多维数组
$arr3 = [
    ["name" => "John", "age" => 30],
    ["name" => "Mary", "age" => 25]
];

5.2 数组操作

php
// 访问数组元素
echo $arr1[0]; // 1
echo $arr2["name"]; // "John"
echo $arr3[0]["name"]; // "John"

// 添加数组元素
$arr1[] = 6; // 添加到末尾
$arr2["phone"] = "1234567890"; // 添加关联元素

// 修改数组元素
$arr1[0] = 10; // 修改索引元素
$arr2["age"] = 31; // 修改关联元素

// 删除数组元素
unset($arr1[0]); // 删除索引元素
unset($arr2["email"]); // 删除关联元素

// 数组长度
$length = count($arr1);

// 数组遍历
foreach ($arr2 as $key => $value) {
    echo "$key: $value<br>";
}

5.3 常用数组函数

php
// 数组排序
sort($arr1); // 升序排序
rsort($arr1); // 降序排序
asort($arr2); // 按值升序排序
ksort($arr2); // 按键升序排序

// 数组合并
$arr4 = array_merge($arr1, $arr2);

// 数组搜索
$key = array_search(3, $arr1); // 查找值为 3 的键

// 数组过滤
$filtered = array_filter($arr1, function($value) {
    return $value > 2;
});

// 数组映射
$mapped = array_map(function($value) {
    return $value * 2;
}, $arr1);

6. NULL

null 表示变量没有值。

6.1 定义 NULL

php
$var1 = null;
$var2 = "value";
$var2 = null; // 将变量设置为 null

6.2 检测 NULL

php
// 使用 is_null()
if (is_null($var1)) {
    echo "变量是 null";
}

// 使用 === 运算符
if ($var1 === null) {
    echo "变量是 null";
}

// 使用 isset()
if (!isset($var1)) {
    echo "变量未设置或为 null";
}

7. 其他数据类型

7.1 对象 (object)

php
// 定义对象
class Person {
    public $name;
    public $age;
    
    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

$person = new Person("John", 30);
echo $person->name; // "John"

7.2 资源 (resource)

资源是指向外部资源的引用,如数据库连接、文件句柄等。

php
// 打开文件资源
$file = fopen("test.txt", "r");

// 关闭资源
fclose($file);

// 数据库连接资源
$conn = mysqli_connect("localhost", "root", "", "test");

// 关闭资源
mysqli_close($conn);

7.3 回调 (callable)

回调是可以被调用的代码块,如函数、方法等。

php
// 函数作为回调
function add($a, $b) {
    return $a + $b;
}

$callback = "add";
echo $callback(1, 2); // 3

// 匿名函数作为回调
$callback = function($a, $b) {
    return $a + $b;
};
echo $callback(1, 2); // 3

8. 类型检测

8.1 类型检测函数

php
// 检测整数
is_int($var);
is_integer($var);
is_long($var);

// 检测浮点数
is_float($var);
is_double($var);
is_real($var);

// 检测布尔值
is_bool($var);

// 检测字符串
is_string($var);

// 检测数组
is_array($var);

// 检测对象
is_object($var);

// 检测 NULL
is_null($var);

// 检测资源
is_resource($var);

// 检测回调
is_callable($var);

// 检测标量类型
is_scalar($var);

// 检测数字
is_numeric($var);

// 检测可迭代
is_iterable($var);

8.2 示例:类型检测

php
$var = 123;

if (is_int($var)) {
    echo "是整数";
} elseif (is_float($var)) {
    echo "是浮点数";
} elseif (is_string($var)) {
    echo "是字符串";
} elseif (is_array($var)) {
    echo "是数组";
} elseif (is_object($var)) {
    echo "是对象";
} elseif (is_null($var)) {
    echo "是 null";
} elseif (is_bool($var)) {
    echo "是布尔值";
} else {
    echo "其他类型";
}

9. 类型转换

9.1 自动类型转换

PHP 会根据上下文自动转换类型。

php
// 字符串转整数
$str = "123";
$int = $str + 0; // 123

// 整数转字符串
$int = 123;
$str = "" . $int; // "123"

// 布尔转整数
$bool = true;
$int = $bool; // 1

$bool = false;
$int = $bool; // 0

9.2 强制类型转换

php
// 转换为整数
$int = (int) "123.45"; // 123
$int = (integer) "123.45"; // 123

// 转换为浮点数
$float = (float) "123"; // 123.0
$float = (double) "123"; // 123.0
$float = (real) "123"; // 123.0

// 转换为字符串
$str = (string) 123; // "123"

// 转换为布尔值
$bool = (bool) ""; // false
$bool = (boolean) "hello"; // true

// 转换为数组
$arr = (array) $object; // 将对象转换为数组

// 转换为对象
$obj = (object) $array; // 将数组转换为对象

10. 最佳实践

10.1 类型使用

  • 选择合适的类型:根据数据的实际含义选择合适的数据类型
  • 保持类型一致:在同一上下文中保持数据类型一致
  • 避免混合类型:避免在同一数组或变量中混合不同类型的数据

10.2 性能考虑

  • 字符串操作:对于频繁的字符串操作,考虑使用 sprintf()heredoc
  • 数组操作:对于大型数组,注意内存使用
  • 类型转换:避免不必要的类型转换

10.3 代码可读性

  • 明确类型:使用类型提示和文档注释明确变量类型
  • 一致命名:使用一致的命名约定,根据类型选择合适的命名
  • 注释类型:对于复杂类型,添加注释说明

11. 示例:综合使用

php
<?php
// 字符串
$name = "John Doe";
$greeting = "Hello, " . $name . "!";
echo $greeting . "<br>";

// 整数和浮点数
$age = 30;
$height = 1.75;
echo "年龄:$age,身高:$height<br>";

// 布尔值
$is_active = true;
echo "是否活跃:" . ($is_active ? "是" : "否") . "<br>";

// 数组
$user = [
    "name" => $name,
    "age" => $age,
    "height" => $height,
    "is_active" => $is_active,
    "hobbies" => ["reading", "coding", "traveling"]
];

echo "用户信息:<br>";
foreach ($user as $key => $value) {
    if (is_array($value)) {
        echo "$key: " . implode(", ", $value) . "<br>";
    } else {
        echo "$key: $value<br>";
    }
}

// NULL
$address = null;
if (is_null($address)) {
    echo "地址:未设置<br>";
}

// 类型转换
$str_age = (string) $age;
echo "年龄(字符串):$str_age,类型:" . gettype($str_age) . "<br>";

$int_height = (int) $height;
echo "身高(整数):$int_height,类型:" . gettype($int_height) . "<br>";

// 类型检测
echo "name 是字符串:" . (is_string($name) ? "是" : "否") . "<br>";
echo "age 是整数:" . (is_int($age) ? "是" : "否") . "<br>";
echo "user 是数组:" . (is_array($user) ? "是" : "否") . "<br>";
echo "address 是 null:" . (is_null($address) ? "是" : "否") . "<br>";
?>

12. 总结

PHP 支持多种数据类型,每种类型都有其特定的用途:

  • 字符串:用于存储文本数据
  • 整数:用于存储整数值
  • 浮点数:用于存储带有小数部分的数字
  • 布尔值:用于表示真或假
  • 数组:用于存储多个值
  • NULL:表示变量没有值
  • 对象:用于面向对象编程
  • 资源:用于引用外部资源
  • 回调:用于可调用的代码块

理解和正确使用这些数据类型,是编写高质量 PHP 代码的基础。

© 2026 编程马·菜鸟教程 版权所有