Reference Guide: What does this symbol mean in PHP? (PHP Syntax)

Reference Guide: What does this symbol mean in PHP? (PHP Syntax)

技术背景

在PHP编程中,理解各种符号和运算符的含义至关重要。不同的符号和运算符在不同的场景下发挥着不同的作用,掌握它们能够帮助开发者更高效地编写代码。

实现步骤

1. 递增/递减运算符

递增运算符 ++ 和递减运算符 -- 可以放在变量之前或之后。

  • 前置递增/递减:先对变量进行递增/递减操作,然后返回变量的值。
  • 后置递增/递减:先返回变量的值,然后对变量进行递增/递减操作。
1
2
3
4
$apples = 10;
for ($i = 0; $i < 10; ++$i) {
echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}

2. 位运算符

位运算符用于对二进制位进行操作。

  • &:按位与,只有当两个操作数的对应位都为1时,结果的对应位才为1。
  • |:按位或,只要两个操作数的对应位中有一个为1,结果的对应位就为1。
  • ^:按位异或,当两个操作数的对应位不同时,结果的对应位为1。
  • ~:按位取反,将操作数的每一位取反。
  • <<:左移,将操作数的二进制位向左移动指定的位数。
  • >>:右移,将操作数的二进制位向右移动指定的位数。
1
2
3
$a = 9;
$b = 10;
echo $a & $b; // 输出 8

3. 太空船运算符 <=>

太空船运算符是PHP 7中新增的比较运算符,用于进行三路比较。

  • 当两个操作数相等时,返回0。
  • 当左操作数小于右操作数时,返回小于0的整数。
  • 当左操作数大于右操作数时,返回大于0的整数。
1
2
3
echo 1 <=> 1; // 输出 0
echo 1 <=> 2; // 输出 -1
echo 2 <=> 1; // 输出 1

4. 类型运算符 instanceof

instanceof 用于判断一个PHP变量是否是某个类的实例化对象。

1
2
3
4
5
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass); // 输出 bool(true)
var_dump($a instanceof sclass); // 输出 bool(false)

5. 其他运算符

  • 逻辑运算符:&&||xor!andor
  • 比较运算符:=====!=<>!==<><=>=<=>? :??
  • 算术运算符:-+-*/%**
  • 字符串运算符:.
  • 数组运算符:+=====!=<>!==
  • 赋值运算符:=+=-=*=/=%=**=.=&=|=^=<<=>>=??=

核心代码

递增/递减运算符示例

1
2
3
4
$a = 5;
echo ++$a; // 输出 6
$b = 5;
echo $b++; // 输出 5

位运算符示例

1
2
3
4
$a = 9;
$b = 10;
echo $a & $b; // 输出 8
echo $a | $b; // 输出 11

太空船运算符示例

1
2
3
echo 10 <=> 10; // 输出 0
echo 10 <=> 20; // 输出 -1
echo 20 <=> 10; // 输出 1

类型运算符示例

1
2
3
4
5
class pclass { } 
class childclass extends pclass { }
$a = new childclass;
var_dump($a instanceof childclass); // 输出 bool(true)
var_dump($a instanceof pclass); // 输出 bool(true)

最佳实践

  • 在使用递增/递减运算符时,根据具体需求选择前置或后置形式。如果需要先使用变量的值再进行递增/递减操作,使用后置形式;如果需要先进行递增/递减操作再使用变量的值,使用前置形式。
  • 在进行比较操作时,根据需要选择合适的比较运算符。如果需要比较值和类型,使用 ===;如果只需要比较值,使用 ==
  • 在使用位运算符时,理解二进制位的操作原理,结合实际需求进行使用。

常见问题

1. andor 运算符的优先级问题

andor 运算符的优先级低于赋值运算符 =。因此,在使用时需要注意括号的使用,避免出现意外的结果。

1
$a = true and false; // 等价于 ($a = true) and false

2. 字符串中使用花括号 {} 的问题

在字符串中使用花括号 {} 时,需要注意其使用规则。有些情况下可以使用,有些情况下则不可以。

1
2
3
4
$x[4] = 'd'; // 正确
$x{4} = 'd'; // 正确
echo "${x[4]}"; // 正确
echo "${x{4}}"; // 错误

3. 空合并运算符 ?? 的使用

空合并运算符 ?? 用于在变量存在且不为 NULL 时返回该变量的值,否则返回第二个操作数的值。

1
$username = $_GET['user'] ?? 'nobody';

4. 可空返回类型声明

在PHP 7.1.0及以上版本中,可以使用可空返回类型声明,即通过在类型名前加问号 ? 表示函数可以返回指定类型或 NULL

1
2
3
4
5
6
7
function get_item(): ?string {
if (isset($_GET['item'])) {
return $_GET['item'];
} else {
return null;
}
}

5. 三点运算符 ... 作为展开运算符

三点运算符 ... 可以用于传递任意数量的参数到函数中,也可以用于展开数组。

1
2
3
4
5
6
7
8
9
function calculateNumbers(...$params){
$total = 0;
foreach($params as $v){
$total = $total + $v;
}
return $total;
}

echo calculateNumbers(10, 20, 30, 40, 50); // 输出 150

6. 空安全运算符 ?->

空安全运算符 ?-> 是PHP 8.0中新增的,用于在调用对象的方法或属性时,如果对象为 NULL 则返回 NULL,避免出现错误。

1
2
$objDrive = null;
$drive = $objDrive?->func?->getDriver()?->value; // 返回 null

7. 属性语法 #[attribute_name]

从PHP 8开始,可以使用 #[attribute_name] 语法来定义属性。在PHP 8之前,#[whatever] 会被视为注释。

1
2
3
4
#[MyAttribute]
class MyClass {
// 类的定义
}

Reference Guide: What does this symbol mean in PHP? (PHP Syntax)
https://119291.xyz/posts/2025-05-08.reference-guide-what-does-this-symbol-mean-in-php/
作者
ww
发布于
2025年5月8日
许可协议