|
环境:PHP8.1
1. else foreach/else for
- //012
- if(false) {
- } else for($i = 0; $i < 3; $i++) {
- echo $i;
- }
- //012
- if(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); //null
- var_dump($obj?->method1()); //null
复制代码 8. 单独调用某个命名空间下的方法
- namespace Namespace1;
- function func1() {
- echo 'func1';
- }
- function func2() {
- echo 'func2';
- }
- namespace Namespace2;
- use function Namespace1\func1;
- func1(); //1
- func2(); //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,向右移动两位,就是0011
- echo 15 >> 2; //3
- //15的二进制是1111,向左移动两位,就是111100
- echo 15 << 2; //60
复制代码 11. 异或运算符 ^
- //15的二进制是1111,2的二进制是0010
- //逐个对比二进制位,都为1则为1,否则为0
- echo 15 & 2; //0010->2
- //逐个对比二进制位,有一个为1则为1,全部为0,则为0
- echo 15 | 2;//1111->15
复制代码 12. 通过异或赋值运算符,在两个变量中,互相交换对方的值
- //异或运算符^,可以理解为二进制逐个对比二进制位,相同为0,不同为1
- $a = 5; //0b0101
- $b = 3; //0b0011
- echo $a ^ $b; // 结果为 6(二进制表示为 0110)
复制代码 13. 添加蛇棒头,用bash shell方式执行PHP脚本
- $a = 'a';
- $b = 'b';
- $a ^= $b;
- $b ^= $a;
- $a ^= $b;
- echo $a, $b; //ba
复制代码 告诉告诉操作系统执行此脚本时运行的解释器,使用的是PHP解释器
[code]#!/usr/bin/env php |
|