PHP 8.4 的新特性

科技   2024-11-29 16:59   辽宁  



我认为 8.4 是静态类型和其他函数的良好状态,它确实可以做比普通升级更多的事情。

在本文中,我们将探讨将 PHP 项目升级到 8.4 版本的主要理由。

就在前两天,php.net 瘫痪了 2 天!这就是为什么花了一段时间才发布这篇文章。

此项新增功能强调了 PHP 8.4 改进的重要性,特别是在静态类型和功能方面,使其有别于典型的次要版本升级。这有助于将本文框定为讨论更实质性的更新,为 PHP 开发提供有意义的增强功能。

1.增强的面向对象编程能力


PHP 8.4 引入了几个增强面向对象编程的功能:


属性挂钩


你现在可以向属性获取和设置操作添加自定义逻辑:

class Person {   public string $fullName {       get => $this->firstName . ' ' . $this->lastName;   }
public string $firstName { set => ucfirst(strtolower($value)); }}

这提供了对属性访问更细粒度的控制。

惰性对象


PHP 8.4 引入了创建具有延迟初始化的对象的功能:

$reflector = new ReflectionClass(Example::class);$object = $reflector->newLazyGhost($initializer);

这对于提高依赖注入场景的性能特别有用。

2. 改善开发人员体验


#[\Deprecated] 属性

新的#[\Deprecated]属性提供了一种标准化的方法来将函数、方法和类常量标记为已弃用。如下例子:

[#\Deprecated(message: 'Use route /v2/something', since: 'v2')]

增强调试
WeakReference调试信息的改进Closure使得在调试期间更容易理解对象关系和闭包细节。

3. 新的语言特性


链接新表达式

现在,你可以直接在新表达式上调用链接方法,而无需使用括号:

$result = new MyClass->someMethod()->anotherMethod();

命名空间符号清除
退出命名空间现在会清除看到的符号,从而允许跨多个命名空间块更灵活地组织代码。

4. 性能改进


虽然迁移指南中没有提供具体的基准,但 PHP 8.4 可能包含各种性能优化,这是新 PHP 版本的典型特征。


5. 新函数与新类


与时俱进的,PHP8.4又为大伙增加了新的有用函数和新类/新方法。我们盘点如下:

http请求相关

  • request_parse_body():解析非 POST HTTP 请求中的 RFC1867(多部分)请求。


数学新函数

  • bcceil():将 BCMath 数字向上舍入为最接近的整数。

  • bcdivmod():同时对 BCMath 数字执行除法和模数运算。

  • bcfloor():将 BCMath 数字向下舍入为最接近的整数。

  • bcround():将 BCMath 数字四舍五入到指定的精度。


日期

  • DateTime::createFromTimestamp():根据 Unix 时间戳创建一个 DateTime 对象。

  • DateTime::getMicrosecond():检索 DateTime 对象的微秒部分。

  • DateTime::setMicrosecond():设置 DateTime 对象的微秒部分。

  • (与 DateTimeImmutable 的方法类似)


DOM

  • DOMNode::compareDocumentPosition():比较文档中两个节点的位置。

  • DOMXPath::registerPhpFunctionNS():注册一个 PHP 函数,以便在具有命名空间的 XPath 查询中使用。

  • DOMXPath::quote():引用字符串以用于 XPath 表达式。


哈希

  • HashContext::__debugInfo():为 HashContext 对象提供调试信息。


国际编程

  • IntlDateFormatter::getIanaID():获取格式化程序使用的时区的 IANA ID。

  • intltz_get_iana_id():获取给定时区的 IANA ID。

  • IntlDateFormatter::parseToCalendar():将字符串解析为日历对象。

  • SpoofChecker::setAllowedChars():设置允许进行欺骗检查的字符。

  • grapheme_str_split():将字符串拆分为字素簇数组。


新的字符串处理函数

  • 如果你的项目中正在使用多字节字符串,可以尝试mb_trim(),mb_ltrim(),mb_rtrim(),trim() 函数的多字节版本。

  • 还有mb_ucfirst(), mb_lcfirst(),ucfirst() 和 lcfirst() 的多字节感知版本。


操作缓存

  • opcache_jit_blacklist():将函数从 JIT 编译中列入黑名单。


pcntl系列函数

  • pcntl_getcpu():获取当前CPU。

  • pcntl_getcpuaffinity():获取进程的CPU亲和性掩码。

  • pcntl_getqos_class():获取进程的 QOS 类(仅限 macOS)。

  • pcntl_setns():设置进程的命名空间。

  • pcntl_waitid():等待子进程改变状态。


PGSQL 相关工具

  • Pdo\Pgsql::setNoticeCallback():设置处理 PostgreSQL 通知的回调。


数据库

  • 各种新的 PostgreSQL 特定函数,用于高级操作。


反射

  • 几种与延迟对象初始化和反射相关的新方法。


加密

  • AEGIS 加密算法的新功能。


频率响应

  • SplObjectStorage::seek():将迭代器移动到特定位置。


SOAP

  • SoapServer::__getLastResponse():获取来自 SOAP 服务器的最后一个响应。


HTTP 标准

  • http_get_last_response_headers():获取最后一个 HTTP 响应的标头。

  • http_clear_last_response_headers():清除存储的最后 HTTP 响应标头。

  • fpow():浮点幂函数。

  • array_all()与array_any()的数组实用函数。包括array_find(),array_find_key()等一序列函数。


Tidy文档

  • tidyNode::getNextSibling(),tidyNode::getPreviousSibling():在 Tidy 文档中的同级节点之间导航。


XMLReader 和 XMLWriter

  • 创建和操作来自各种来源的 XML 的新方法。


XSL

  • XSLTProcessor::registerPhpFunctionNS():注册一个 PHP 函数以便在具有命名空间的 XSLT 中使用。


新的mb_*函数

  • 如果你的项目中正在使用多字节字符串,mb_trim()将是一个受欢迎的补充。此包括mb_ltrim(),mb_rtrim(),mb_ucfirst(),mb_lcfirst()等一系列函数。


6.扩展库支持

PHP8.4 提供了改进的 cURL 扩展支持。用于处理 HTTP/3、调试和更详细的时间信息的新常量和相关选项。


增强型加密支持

OpenSSL 扩展现在支持基于 Curve25519 和 Curve448 的密钥,以及 Argon2 密码哈希(使用 OpenSSL 3.2)。

PDO 改进

特定于驱动程序的子类和 SQL 解析器,以提供更好的特定于数据库的功能支持。

7.标准化和现代化

PHP 8.4 延续了语言现代化的趋势,并使其与当前软件开发的最佳实践保持一致。

结语


升级到 PHP 8.4 有很多好处,包括增强的 OOP 功能、改进的开发人员工具、新的语言功能和扩展的库支持。虽然任何升级都应谨慎进行并进行适当的测试,但 PHP 8.4 中的新功能和改进,将使许多 PHP 项目进行引人注目的更新。

作者:军长

相关阅读:

21CTO
21CTO(21CTO.com),开发者的学习与服务平台。提供高品质文章、课程与训练营、招聘等产品。
 最新文章