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;
|
3. 太空船运算符 <=>
太空船运算符是PHP 7中新增的比较运算符,用于进行三路比较。
- 当两个操作数相等时,返回0。
- 当左操作数小于右操作数时,返回小于0的整数。
- 当左操作数大于右操作数时,返回大于0的整数。
1 2 3
| echo 1 <=> 1; echo 1 <=> 2; echo 2 <=> 1;
|
4. 类型运算符 instanceof
instanceof
用于判断一个PHP变量是否是某个类的实例化对象。
1 2 3 4 5
| class mclass { } class sclass { } $a = new mclass; var_dump($a instanceof mclass); var_dump($a instanceof sclass);
|
5. 其他运算符
- 逻辑运算符:
&&
、||
、xor
、!
、and
、or
。 - 比较运算符:
==
、===
、!=
、<>
、!==
、<
、>
、<=
、>=
、<=>
、? :
、??
。 - 算术运算符:
-
、+
、-
、*
、/
、%
、**
。 - 字符串运算符:
.
。 - 数组运算符:
+
、==
、===
、!=
、<>
、!==
。 - 赋值运算符:
=
、+=
、-=
、*=
、/=
、%=
、**=
、.=
、&=
、|=
、^=
、<<=
、>>=
、??=
。
核心代码
递增/递减运算符示例
1 2 3 4
| $a = 5; echo ++$a; $b = 5; echo $b++;
|
位运算符示例
1 2 3 4
| $a = 9; $b = 10; echo $a & $b; echo $a | $b;
|
太空船运算符示例
1 2 3
| echo 10 <=> 10; echo 10 <=> 20; echo 20 <=> 10;
|
类型运算符示例
1 2 3 4 5
| class pclass { } class childclass extends pclass { } $a = new childclass; var_dump($a instanceof childclass); var_dump($a instanceof pclass);
|
最佳实践
- 在使用递增/递减运算符时,根据具体需求选择前置或后置形式。如果需要先使用变量的值再进行递增/递减操作,使用后置形式;如果需要先进行递增/递减操作再使用变量的值,使用前置形式。
- 在进行比较操作时,根据需要选择合适的比较运算符。如果需要比较值和类型,使用
===
;如果只需要比较值,使用 ==
。 - 在使用位运算符时,理解二进制位的操作原理,结合实际需求进行使用。
常见问题
1. and
和 or
运算符的优先级问题
and
和 or
运算符的优先级低于赋值运算符 =
。因此,在使用时需要注意括号的使用,避免出现意外的结果。
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);
|
6. 空安全运算符 ?->
空安全运算符 ?->
是PHP 8.0中新增的,用于在调用对象的方法或属性时,如果对象为 NULL
则返回 NULL
,避免出现错误。
1 2
| $objDrive = null; $drive = $objDrive?->func?->getDriver()?->value;
|
7. 属性语法 #[attribute_name]
从PHP 8开始,可以使用 #[attribute_name]
语法来定义属性。在PHP 8之前,#[whatever]
会被视为注释。
1 2 3 4
| #[MyAttribute] class MyClass { }
|