赋值运算符 #

一、基本赋值 #

1.1 简单赋值 #

php
<?php
$name = "PHP";
$version = 8.2;
$isActive = true;
$items = [1, 2, 3];

1.2 链式赋值 #

php
<?php
$a = $b = $c = 0;
echo $a, $b, $c;

1.3 表达式赋值 #

php
<?php
$sum = 1 + 2 + 3;
$message = "Hello" . " " . "World";
$result = max(1, 2, 3);

二、复合赋值运算符 #

2.1 运算符列表 #

运算符 示例 等价于
+= $a += $b $a = $a + $b
-= $a -= $b $a = $a - $b
*= $a *= $b $a = $a * $b
/= $a /= $b $a = $a / $b
%= $a %= $b $a = $a % $b
**= $a **= $b $a = $a ** $b
.= $a .= $b $a = $a . $b
??= $a ??= $b $a = $a ?? $b

2.2 算术复合赋值 #

php
<?php
$a = 10;
$a += 5;
echo $a;

$a -= 3;
echo $a;

$a *= 2;
echo $a;

$a /= 4;
echo $a;

$a %= 3;
echo $a;

$a **= 2;
echo $a;

2.3 字符串复合赋值 #

php
<?php
$message = "Hello";
$message .= " ";
$message .= "World";
echo $message;

2.4 数组复合赋值 #

php
<?php
$arr = ['a' => 1];
$arr += ['b' => 2, 'a' => 10];
print_r($arr);

三、引用赋值 #

3.1 基本引用 #

php
<?php
$a = 10;
$b = &$a;

$a = 20;
echo $b;

$b = 30;
echo $a;

3.2 函数返回引用 #

php
<?php
function &getReference(): int
{
    static $value = 0;
    return $value;
}

$ref = &getReference();
$ref = 10;
echo getReference();

3.3 数组元素引用 #

php
<?php
$arr = [1, 2, 3];
$ref = &$arr[0];
$ref = 100;
print_r($arr);

3.4 foreach 引用 #

php
<?php
$arr = [1, 2, 3, 4, 5];

foreach ($arr as &$value) {
    $value *= 2;
}
unset($value);

print_r($arr);

四、Null合并赋值运算符(??=) #

PHP 7.0+ 提供 ?? 运算符,PHP 7.4+ 提供 ??= 赋值运算符:

4.1 ?? 运算符 #

php
<?php
$a = null;
$b = $a ?? "default";
echo $b;

$a = "value";
$b = $a ?? "default";
echo $b;

4.2 ??= 运算符 #

php
<?php
$a = null;
$a ??= "default";
echo $a;

$a ??= "another";
echo $a;

4.3 实际应用 #

php
<?php
function process(array $config): void
{
    $config['timeout'] ??= 30;
    $config['retries'] ??= 3;
    $config['debug'] ??= false;
    
    print_r($config);
}

process(['timeout' => 60]);

4.4 与 ?: 的区别 #

php
<?php
$a = 0;
$b = $a ?? "default";
$c = $a ?: "default";
echo "b = $b, c = $c";

$a = null;
$b = $a ?? "default";
$c = $a ?: "default";
echo "b = $b, c = $c";

五、三元运算符 #

5.1 基本语法 #

php
<?php
$result = $condition ? $valueIfTrue : $valueIfFalse;

$age = 20;
$status = $age >= 18 ? "成年" : "未成年";
echo $status;

5.2 嵌套三元 #

php
<?php
$score = 85;
$grade = $score >= 90 ? "A" : 
         ($score >= 80 ? "B" : 
         ($score >= 70 ? "C" : 
         ($score >= 60 ? "D" : "F")));
echo $grade;

5.3 简写形式(?:) #

php
<?php
$name = "";
$displayName = $name ?: "Guest";
echo $displayName;

$name = "John";
$displayName = $name ?: "Guest";
echo $displayName;

5.4 注意事项 #

php
<?php
$name = "0";
$displayName = $name ?: "Guest";
echo $displayName;

$name = "0";
$displayName = $name !== "" ? $name : "Guest";
echo $displayName;

六、位运算复合赋值 #

6.1 运算符列表 #

运算符 示例 等价于
&= $a &= $b $a = $a & $b
|= $a |= $b $a = $a | $b
^= $a ^= $b $a = $a ^ $b
<<= $a <<= $n $a = $a << $n
>>= $a >>= $n $a = $a >> $n

6.2 示例 #

php
<?php
$a = 5;
$a &= 3;
echo $a;

$a = 5;
$a |= 3;
echo $a;

$a = 5;
$a ^= 3;
echo $a;

$a = 5;
$a <<= 1;
echo $a;

$a = 5;
$a >>= 1;
echo $a;

七、赋值与比较的区别 #

7.1 常见错误 #

php
<?php
$a = 5;
if ($a = 10) {
    echo "总是执行";
}

7.2 正确写法 #

php
<?php
$a = 5;
if ($a === 10) {
    echo "a等于10";
}

7.3 Yoda 条件 #

php
<?php
if (10 === $a) {
    
}

八、数组解构赋值 #

8.1 list() 函数 #

php
<?php
$arr = [1, 2, 3];
list($a, $b, $c) = $arr;
echo "$a, $b, $c";

[$a, $b, $c] = $arr;
echo "$a, $b, $c";

8.2 跳过元素 #

php
<?php
$arr = [1, 2, 3, 4];
[$a, , $c] = $arr;
echo "$a, $c";

8.3 关联数组解构 #

php
<?php
$user = ['name' => 'John', 'age' => 25];
['name' => $name, 'age' => $age] = $user;
echo "$name, $age";

8.4 嵌套解构 #

php
<?php
$data = [
    'user' => ['name' => 'John', 'email' => 'john@example.com'],
    'status' => 'active'
];

['user' => ['name' => $name], 'status' => $status] = $data;
echo "$name, $status";

九、最佳实践 #

9.1 初始化变量 #

php
<?php
$count = 0;
$name = "";
$items = [];
$active = false;

9.2 使用 null 合并 #

php
<?php
$name = $_GET['name'] ?? 'Guest';
$page = $_GET['page'] ?? 1;

9.3 避免复杂表达式 #

php
<?php
$isValid = $user !== null && $user->isActive();
$hasPermission = $user->can('edit') || $user->isAdmin();

if ($isValid && $hasPermission) {
    
}

9.4 解构赋值 #

php
<?php
function getUser(): array
{
    return ['name' => 'John', 'age' => 25];
}

['name' => $name, 'age' => $age] = getUser();

十、总结 #

本章学习了:

  • 基本赋值运算符
  • 复合赋值运算符
  • 引用赋值
  • Null合并赋值运算符
  • 三元运算符
  • 数组解构赋值

下一章将学习字符串运算符。

最后更新:2026-03-26