slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
PHP 8.4 的新特性
17611538698
webmaster@21cto.com

PHP 8.4 的新特性

编程语言 0 1365 2024-11-29 05:17: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 项目进行引人注目的更新。

作者:军长

评论