基本数据类型 #

一、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