基本数据类型 #
一、PHP数据类型概览 #
PHP支持以下数据类型:
| 类别 | 类型 | 说明 |
|---|---|---|
| 标量类型 | int | 整数 |
| 标量类型 | float | 浮点数 |
| 标量类型 | string | 字符串 |
| 标量类型 | bool | 布尔值 |
| 复合类型 | array | 数组 |
| 复合类型 | object | 对象 |
| 复合类型 | callable | 可调用 |
| 复合类型 | iterable | 可迭代 |
| 特殊类型 | null | 空值 |
| 特殊类型 | resource | 资源 |
二、整数(int) #
2.1 整数表示 #
php
<?php
$decimal = 42;
$negative = -42;
$octal = 052;
$hexadecimal = 0x2A;
$binary = 0b101010;
echo $decimal;
echo $octal;
echo $hexadecimal;
echo $binary;
2.2 整数大小 #
整数大小取决于平台,通常为32位或64位:
php
<?php
echo PHP_INT_SIZE;
echo PHP_INT_MAX;
echo PHP_INT_MIN;
2.3 整数溢出 #
当整数超出范围时,自动转为浮点数:
php
<?php
$large = PHP_INT_MAX;
$overflow = $large + 1;
var_dump($large);
var_dump($overflow);
2.4 整数分隔符(PHP 7.4+) #
使用下划线分隔大数字,提高可读性:
php
<?php
$price = 1_000_000;
$bytes = 107_374_1824;
$creditCard = 1234_5678_9012_3456;
三、浮点数(float) #
3.1 浮点数表示 #
php
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
$d = 1_234.567;
3.2 浮点数精度 #
浮点数有精度限制,比较时需注意:
php
<?php
$a = 0.1 + 0.2;
$b = 0.3;
var_dump($a == $b);
if (abs($a - $b) < 0.00001) {
echo "近似相等";
}
3.3 特殊值 #
php
<?php
echo INF;
echo -INF;
echo NAN;
var_dump(is_infinite(INF));
var_dump(is_nan(NAN));
3.4 浮点数常量 #
php
<?php
echo PHP_FLOAT_MAX;
echo PHP_FLOAT_MIN;
echo PHP_FLOAT_DIG;
四、字符串(string) #
4.1 单引号字符串 #
单引号字符串不解析变量和转义字符(除 \' 和 \\):
php
<?php
$name = "PHP";
$str1 = 'Hello $name';
$str2 = 'Hello\nWorld';
$str3 = 'It\'s me';
$str4 = 'Path: C:\\xampp';
4.2 双引号字符串 #
双引号字符串解析变量和转义字符:
php
<?php
$name = "PHP";
$str1 = "Hello $name";
$str2 = "Hello {$name}!";
$str3 = "Hello ${name}!";
$str4 = "Line1\nLine2";
$str5 = "Tab:\tHere";
4.3 转义字符 #
| 转义字符 | 说明 |
|---|---|
| \n | 换行 |
| \r | 回车 |
| \t | 制表符 |
| \ | 反斜杠 |
| $ | 美元符号 |
| " | 双引号 |
| [ | 左方括号(避免数组解析) |
4.4 Heredoc #
类似双引号字符串,适合大段文本:
php
<?php
$name = "PHP";
$str = <<<EOT
Hello, $name!
This is a multi-line string.
Variables are parsed: $name
EOT;
echo $str;
4.5 Nowdoc #
类似单引号字符串,不解析变量:
php
<?php
$name = "PHP";
$str = <<<'EOT'
Hello, $name!
Variables are NOT parsed: $name
EOT;
echo $str;
4.6 字符串长度 #
php
<?php
$str = "Hello";
echo strlen($str);
$str = "你好";
echo strlen($str);
echo mb_strlen($str);
4.7 字符串连接 #
php
<?php
$str1 = "Hello";
$str2 = "World";
$result = $str1 . " " . $str2;
echo $result;
$str1 .= " PHP";
echo $str1;
五、布尔值(bool) #
5.1 布尔值 #
php
<?php
$true = true;
$false = false;
$true = TRUE;
$false = FALSE;
5.2 布尔值转换 #
以下值转换为 false:
| 值 | 类型 |
|---|---|
| false | bool |
| 0 | int |
| 0.0 | float |
| “” | string |
| “0” | string |
| [] | array |
| null | null |
| SimpleXML对象 | 从空标签创建 |
其他值转换为 true。
php
<?php
var_dump((bool) 0);
var_dump((bool) "");
var_dump((bool) "0");
var_dump((bool) []);
var_dump((bool) null);
六、数组(array) #
6.1 索引数组 #
php
<?php
$arr1 = [1, 2, 3, 4, 5];
$arr2 = array(1, 2, 3, 4, 5);
echo $arr1[0];
echo $arr1[1];
6.2 关联数组 #
php
<?php
$user = [
'name' => 'John',
'age' => 25,
'city' => 'Beijing'
];
echo $user['name'];
echo $user['age'];
6.3 混合数组 #
php
<?php
$mixed = [
0 => 'first',
'name' => 'John',
1 => 'second',
'age' => 25
];
6.4 多维数组 #
php
<?php
$users = [
[
'name' => 'John',
'age' => 25
],
[
'name' => 'Jane',
'age' => 30
]
];
echo $users[0]['name'];
echo $users[1]['age'];
6.5 数组操作 #
php
<?php
$arr = [1, 2, 3];
$arr[] = 4;
array_push($arr, 5);
$arr['key'] = 'value';
unset($arr[0]);
echo count($arr);
七、对象(object) #
7.1 创建对象 #
php
<?php
class User
{
public string $name;
public int $age;
public function __construct(string $name, int $age)
{
$this->name = $name;
$this->age = $age;
}
public function greet(): string
{
return "Hello, I'm " . $this->name;
}
}
$user = new User("John", 25);
echo $user->name;
echo $user->greet();
7.2 对象转数组 #
php
<?php
$user = new User("John", 25);
$arr = (array) $user;
$obj = (object) $arr;
7.3 stdClass #
PHP内置的空类,用于创建匿名对象:
php
<?php
$obj = new stdClass();
$obj->name = "John";
$obj->age = 25;
$obj = (object) ['name' => 'John', 'age' => 25];
八、NULL #
8.1 NULL类型 #
null 表示变量没有值:
php
<?php
$var = null;
$var = NULL;
if (is_null($var)) {
echo "变量为null";
}
8.2 NULL相关操作 #
php
<?php
$var = null;
$var ??= "default";
echo $var;
$a = null;
$b = "value";
$result = $a ?? $b;
echo $result;
九、类型检测 #
9.1 gettype() #
php
<?php
echo gettype(42);
echo gettype(3.14);
echo gettype("hello");
echo gettype(true);
echo gettype([1, 2, 3]);
echo gettype(new stdClass());
echo gettype(null);
9.2 is_* 函数 #
php
<?php
var_dump(is_int(42));
var_dump(is_float(3.14));
var_dump(is_string("hello"));
var_dump(is_bool(true));
var_dump(is_array([1, 2, 3]));
var_dump(is_object(new stdClass()));
var_dump(is_null(null));
var_dump(is_numeric("42"));
var_dump(is_scalar(42));
var_dump(is_callable('strlen'));
十、类型声明(PHP 7+) #
10.1 标量类型声明 #
php
<?php
declare(strict_types=1);
function add(int $a, int $b): int
{
return $a + $b;
}
function greet(string $name): string
{
return "Hello, $name";
}
function calculate(float $price, float $tax): float
{
return $price * (1 + $tax);
}
10.2 可空类型 #
php
<?php
function findUser(?int $id): ?string
{
if ($id === null) {
return null;
}
return "User #$id";
}
echo findUser(1);
echo findUser(null);
10.3 混合类型(PHP 8.0+) #
php
<?php
function process(mixed $value): mixed
{
return $value;
}
10.4 联合类型(PHP 8.0+) #
php
<?php
function format(int|float $number): string
{
return number_format($number, 2);
}
function getId(): int|string
{
return 1;
}
十一、总结 #
本章学习了:
- PHP的数据类型分类
- 整数、浮点数、字符串、布尔值
- 数组和对象
- NULL类型
- 类型检测函数
- 类型声明
下一章将学习类型转换。
最后更新:2026-03-26