13426109659
webmaster@21cto.com

PHP 8.5:真正让生活更轻松的版本

编程语言 0 21 1天前
图片

各位伙伴们,PHP 8.5 就要发布啦。

说实话,作为一名资深型开发者,它是让我兴奋地的版本之一。这些新功能虽然不多,但感觉很棒,你明白吗?我说的是那些能让我们每天生活更轻松的功能。

让我带你了解一下。

新的管道运算符:不再有临时变量


管道运算符,你可能在推文和 RFC 中见过它。没错,它确实很有用

想象一下:你有一个名为 sendEmail 的函数。它接受一个电子邮件地址作为参数,但在发送之前,你想对其进行一些清理。例如,删除空格、将其转换为小写……这些都是常见的操作。

在 PHP 8.5 之前,你会这样写:

$email = " TEST@EXAMPLE.COM " ; $email = trim($email); $email = strtolower($email); sendEmail($email);

临时变量、重新赋值等等,这些都不是问题。而现在,有了管道运算符,可以这样来写:

“TEST@EXAMPLE.COM”|>trim()|> strtolower()|> sendEmail();

不必使用临时变量,所有流程都是从左到右,这让你的代码更加地简洁。

无丢弃属性:停止忽略返回值


接下来我要说的是,#[NoDiscard]

这个东东真是太棒了。有时你调用一个函数,必须使用返回值,但别人(甚至你自己)可能会忘记。

如果你忽略了它,PHP 8.5 现在可以发出警告了。

#[NoDiscard]function getName():string{return “Nuno”;}

如果你这样做:

getName(); // PHP 会警告你:“嘿,你应该使用返回值!”

它会强制你处理结果,或者如果你真的想忽略它,可以显式地将其转换为 void。

说实话,这对我来说是三大特性中最重要的一个。将它与管道运算符结合使用,你就可以编写干净、安全的链式调用,而不会出现任何警告。

常量表达式中的闭包


PHP 8.5 现在允许你在仅接受编译时值的地方使用静态闭包。类常量、默认属性值、属性参数……现在您可以在所有这些地方使用闭包。

classexample{publicconstVALIDATOR = staticfunction ($value){return!empty($value);	};}

以前,这会失败,但现在可以了。你可以直接将可重用的逻辑附加到常量或属性上。这对于像 Laravel 这样使用大量验证或元数据的框架来说意义重大。

数组处理新助手:array_first()array_last()


我想知道,开发者获取数组的第一个或最后一个元素有多烦人吗?我的意思是说,PHP 提供有reset()end()函数,但它们会移动内部指针。现在我们有这个新工具:

$user = [“阿德里安”,“玛丽亚”,“佩德罗”];$first = array_first($users); // 阿德里安$last = array_last($users); // 佩德罗
它简单、直观,最重要的是它不会干扰你的数组指针。正所谓小改动,大不同。


具有属性的全局常量


另一个微妙之处。PHP 8.5 现在允许你为全局常量添加属性,以前这是不可能的。现在,你可以执行以下操作:

#[Deprecated "改用 NEW_CONSTANT" ) ]const OLD_CONSTANT 42 ;
我们尝试显示它:

echo OLD_CONSTANT; // 42 + 弃用警告
它本质上是常量的元数据。如果你的框架或包使用常量进行配置,你现在可以清晰地附加额外的信息。


获取异常处理程序


对于框架开发者来说,不管你是使用Laravel还是其它框架,这个功能都是太棒了。


那就是PHP 8.5 引入了一个新的get_exception_handler()函数


如果你曾经使用过set_exception_handler(),你就会知道检查现有的闭包很困难。


现在,你可以直接使用它了:


set_exception_handler(fn( $e ) => echo "捕获到:" . $e ->getMessage()); $handler = get_exception_handler();var_dump( $handler );

这非常适合日志记录、调试,甚至在运行时修改异常处理。像 Laravel 这样的框架可以充分利用它来实现全局错误处理。

初始化列表格式化程序

这里有个有趣的例子:IntlListFormatter。虽然不是每天都会用到,但需要的时候就很完美了。你可以列一个清单,然后根据本地规则进行格式化。


$formatter new \Intl\IntlListFormatter('en'\Intl\IntlListFormatter::TYPE_AND);echo $formatter->format(['Lisbon''Porto''Coimbra']); // "Lisbon, Porto, and Coimbra"

它会自动处理“and”、“or”以及其他本地化的列表格式化方式。这对于国际化应用来说,无疑是一个提升。

细微的内部改进和仅限 CLI 的改进


即使是 PHP 8.5 中的小改进也会产生影响,特别是使用 CLI 或关心内部调试或配置时。

1.比较php.ini的差异(PHP-IN-DIFF


在某些时候,你是否希望能够快速查看哪些设置已从默认 PHP 配置中更改?PHP 8.5使用新的 CLI 命令使此操作变得非常简单:

php- i --diff

这会向你显示哪些php.ini选项与默认值不同。例如,我在测试时总是增加内存限制并禁用脚本超时:

memory_limit = - 1max_execution_time = 0

以前,我们必须手动比较或滚动浏览phpinfo()

现在它实际上是内置的。对于任何调试 PHP 设置的人来说,这都是一个小小的改进,但却能带来巨大的帮助。

2. PHP 构建日期常量


PHP 8.5 引入了一个新常量,它可以准确地告诉你二进制文件的构建时间。

想检查一下吗?

echo PHP_BUILD_DATE;

输出:

2025918日 14:32:00

如果你运行多个 PHP 二进制文件,或者想要验证你正在使用的版本/构建,它就非常适合你。

虽然没有什么突破性的功能,但同样,它能提升你的使用体验。

3. final属性增加


PHP 8.5 改进了属性修饰功能,允许将单个属性标记为final。之前可以将整个类设置为 final,现在可以在构造函数中指定特定属性:

class user {   public function __construct (       public string final $username       public string $email ) {}}      

现在$username无法在子类中被覆盖。这很微妙,但对于注重不变性的代码库来说,这是一个巨大的清晰度提升

4. CLI 和调试调整


其他的小改进包括:

  • 使用php -d覆盖时更好的默认错误报告。
  • 清除 CLI 模式下已弃用功能的警告。
  • 底层的小优化可以使脚本运行得更快或在边缘情况下消耗更少的内存。


上面这些都不需要你更改代码,但如果您是框架开发人员或 DevOps 人员,它们会使日常 PHP 使用更加顺畅

为什么即使是微小的改变也很重要


重点是:PHP 8.5 不仅仅包含一些炫酷的功能。即使是细微的内部改进和 CLI 调整,也能减少工作流程中的摩擦。这才是它真正的魔力所在,减少您花在配置上的时间,将更多时间投入到编写真正有用的代码中。

总结想法


PHP 8.5 包含许多提升用户体验的功能。并非所有功能都能改变你的世界,但它们共同作用,让这门语言更加流畅、安全、有趣。

  • 管道运算符:清洁链,没有临时变量。
  • NoDiscard:不再忽略重要的返回值。
  • 常量中的闭包:在编译时将逻辑附加到任何地方。
  • 数组助手:轻松访问第一个和最后一个元素。
  • 常量上的属性:干净地添加元数据。
  • 异常处理程序检查:框架友好。
  • 国际列表格式化程序:智能、本地化的列表。


PHP 8.5 感觉就像是那些让你再次乐于编写 PHP 的版本之一。它虽然并不华丽,但却巧妙、实用,并且以开发者为先。

如果你还没有体验过,那就赶紧测试一下 Beta 版吧。我保证其中一些功能会直接融入你的日常编程习惯里。

作者:行动的大雄

评论