环境:PHP8.11. else foreach/else for

//012if(false) {} else for($i = 0; $i < 3; $i++) {    echo $i;}//012if(false) {} else foreach([0, 1, 2] as $v) {    echo $v;}

2. 匿名函数简写

$func = function($val) {    return $val;};//等同于$func = fn($val) => $val;$func(1);

3. 匿名函数叠加

$func = fn() => fn() => 1;echo $func()();

4. 消失的分号

//不会报错

5. 空数组合并运算符

//使用??=,如果数组的元素有值且不为null,则赋值失败$arr = [];$arr['k1'] ??= 'v1';print_r($arr);$arr['k1'] ??= 'v2';print_r($arr);

6. 利用内置类,创建空对象

$obj = new stdClass();$obj->i = 123;echo $obj->i; //1

7. 利用?->安全导航运算符,避免调用不存在的方法或属性时报错

$obj = null;var_dump($obj?->attr); //nullvar_dump($obj?->method1()); //null

8. 单独调用某个命名空间下的方法

namespace Namespace1;function func1() {    echo 'func1';}function func2() {    echo 'func2';}namespace Namespace2;use function Namespace1\func1;func1(); //1func2(); //Fatal error: Uncaught Error: Call to undefined function Namespace2\func2() in t1.php:13 Stack trace: #0 {main} thrown in t1.php on line 13

9. 移位运算符 <>

//15的二进制是1111,向右移动两位,就是0011echo 15 >> 2; //3//15的二进制是1111,向左移动两位,就是111100echo 15 << 2; //60

10. 位运算符 |/&

//15的二进制是1111,2的二进制是0010//逐个对比二进制位,都为1则为1,否则为0echo 15 & 2; //0010->2//逐个对比二进制位,有一个为1则为1,全部为0,则为0echo 15 | 2;//1111->15

11. 异或运算符 ^

//异或运算符^,可以理解为二进制逐个对比二进制位,相同为0,不同为1$a = 5; //0b0101$b = 3; //0b0011echo $a ^ $b; // 结果为 6(二进制表示为 0110)

12. 通过异或赋值运算符,在两个变量中,互相交换对方的值

$a = 'a';$b = 'b';$a ^= $b;$b ^= $a;$a ^= $b;echo $a, $b; //ba

13. 添加蛇棒头,用bash shell方式执行PHP脚本

touch test.phpchmod +x test.php..../test.php

告诉告诉操作系统执行此脚本时运行的解释器,使用的是PHP解释器

#!/usr/bin/env php<?phpecho 1;

告诉告诉操作系统执行此脚本时用这个目录下的PHP去执行

#!/usr/local/php/bin/php<?phpecho 1;