PHP 零基础教程

PHP 运算符进阶

递增(Increment)和递减(Decrement)运算符提供了一种极其简洁的简写方式,用于将变量的当前值加一或减一。

在 PHP 中,这些运算符以两种形式存在:前缀递增/递减(Pre-increment/decrement)和后缀递增/递减(Post-increment/decrement)。

1. 理解前缀与后缀的区别

这两者之间的唯一区别在于:相对于变量在表达式中被求值的时间,修改发生的时间点是不同的。

  • 前缀递增 (++$a): 变量会先被加一,然后再返回修改后的值。
  • 后缀递增 ($a++): 会先返回变量的原始值,然后再对变量加一。

同样的逻辑也完全适用于递减运算符(--$a$a--)。

<?php
$count = 10;

// 后缀递增:先返回 10,然后将 $count 的值设为 11
echo $count++; // 输出 10
echo $count;   // 输出 11

$score = 5;

// 前缀递增:先将 $score 的值设为 6,然后返回 6
echo ++$score; // 输出 6
echo $score;   // 输出 6
?>

1.1 执行流程对比

为了让你更直观地理解,我们可以把底层执行流程拆解如下:

步骤前缀操作 (如 ++$a)后缀操作 (如 $a++)
第一步修改变量的值(加/减 1)存储原始值到临时空间
第二步返回新值参与表达式计算修改变量的值(加/减 1)
第三步(无)返回存储的原始值参与表达式计算

新手避坑指南: 错误地使用这些运算符很容易导致“差一错误(off-by-one errors)”。当运算符作为一个独立的语句使用时(例如单写一行 $i++;),前缀和后缀在功能上没有任何区别。只有当变量被用作更复杂的表达式或赋值操作的一部分时,这种区别才至关重要。

2. 字符串运算符与拼接

PHP 提供了两个主要的运算符来处理字符串:拼接运算符 (.)拼接赋值运算符 (.=)

  • 句号 (.) 用于将两个或多个字符串连接(拼接)成一个完整的字符串。
<?php
$firstName = "Jane";
$lastName = "Doe";

// 标准拼接
$fullName = $firstName . " " . $lastName; // 结果是 "Jane Doe"

// 拼接赋值:将新数据追加到现有的变量末尾
$message = "Hello, ";
$message .= $firstName; // $message 现在变成了 "Hello, Jane"
$message .= "!";        // $message 现在变成了 "Hello, Jane!"
?>

3. PHP 中的特殊行为 (行为细微差别)

与其他一些强类型语言不同,当把递增运算符应用在非数字类型上时,PHP 会表现出一些特殊的特定行为。

  • 布尔值 (Boolean): 递增 true 结果仍然是 true(它不会变成 2)。对布尔值进行递减没有任何效果。
  • 空值 (Null): 递增 null 的结果是 1(PHP 在这里将其视为 0)。递减 null 没有任何效果。
  • 字符串 (Strings): PHP 支持对只包含字母和数字的字符串进行递增,但不支持递减它们。字母会按照字母表顺序向后推移。
<?php
$str = "A";
$str++; // $str 现在变成了 "B"

$str = "Z";
$str++; // $str 现在变成了 "AA" (类似 Excel 表格的列名递增规则)
?>