PHP 8.1 编程语言新分支的第一个 alpha 版本已经发布。 该版本计划于 25 月 8.1 日发布。 已可用于测试或计划在 PHP XNUMX 中实施的主要创新:
- 添加了对枚举的支持,例如,您现在可以使用以下结构: enum Status { case Pending; 案例活跃; 案例已存档; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
- 添加了对称为 Fiber 的轻量级线程的支持,允许您在低级别控制并行化。 计划将 Fiber 支持添加到 Amphp 和 ReactPHP 框架中。 $ Fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('暂停后'); // ... }); $valueAfterSuspending = $fibre->start(); $ Fiber->resume('恢复后');
- 目标代码缓存(opcache)的实现已得到改进,使得缓存有关类继承的信息成为可能。 优化可以将某些应用程序的性能提高 5-8%。
- 数组“...$var”内的解包运算符允许在定义新数组时替换现有数组,已扩展为支持字符串键(以前仅支持数字标识符)。 例如,您现在可以在代码中使用: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($数组); // [“a”=> 1,“b”=> 2]
- 有一种新类型“never”可用于通知静态分析器某个函数将终止程序执行,例如通过引发异常或执行退出函数。 函数 dd(mixed $input): never { exit; }
- 提出了一个新函数 array_is_list,它允许您确定数组中的键从 0 开始按数值递增的顺序排列: $list = [“a”, “b”, “c”]; array_is_list($list); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // 错误的
- 已经提出了在继承过程中重新定义类中常量的可能性。 为了防止重写父类常量,可以使用“final”关键字。 类 Foo { 公共 const X = "foo"; 最终公共 const Z = "foo"; } class Bar 扩展了 Foo { public const X = "bar"; }
- 建议使用 fsync 和 fdatasync 函数强制从磁盘缓存保存更改。 $file = fopen("sample.txt", "w"); fwrite($file, "部分内容"); if (fsync($file)) { echo "文件已成功保存到磁盘。"; fclose($文件);
- 除了之前使用的前缀“0”之外,还添加了对八进制数使用前缀“0o”和“0O”的功能。 016 === 0o16; // 真 016 === 0O16; // 真的
- 建议有选择地限制 $GLOBALS 的使用,这将导致向后兼容性的违反,但可以显着加快数组操作的速度。 例如,正在考虑禁用写入 $GLOBALS 并通过指针传递 $GLOBALS 的可能性。 对 2000 个软件包的分析显示,其中只有 23 个软件包会受到此更改的影响。 例如,如果提案获得批准,8.1 将不再支持以下表达式:$GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; 取消设置($GLOBALS); by_ref($GLOBALS);
- 将功能从使用资源转移到操作对象的工作仍在继续。 finfo_* 和 imap_* 函数已转移到对象。
- 将空值作为参数传递给标记为不可空的内部函数已被弃用。 在 PHP 8.1 中,使用 str_contains(“string”, null) 等结构将导致警告,而在 PHP 9 中将导致错误。
- 添加了对 MurmurHash3 和 xxHash 哈希算法的支持。
来源: opennet.ru
