我认为 8.4 是静态类型和其他函数的良好状态,它确实可以做比普通升级更多的事情。
在本文中,我们将探讨将 PHP 项目升级到 8.4 版本的主要理由。
就在前两天,php.net 瘫痪了 2 天!这就是为什么花了一段时间才发布这篇文章。
此项新增功能强调了 PHP 8.4 改进的重要性,特别是在静态类型和功能方面,使其有别于典型的次要版本升级。这有助于将本文框定为讨论更实质性的更新,为 PHP 开发提供有意义的增强功能。
class Person {
public string $fullName {
get => $this->firstName . ' ' . $this->lastName;
}
public string $firstName {
set => ucfirst(strtolower($value));
}
}
这提供了对属性访问更细粒度的控制。
$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyGhost($initializer);
这对于提高依赖注入场景的性能特别有用。
\Deprecated(message: 'Use route /v2/something', since: 'v2')]
增强调试
WeakReference调试信息的改进Closure使得在调试期间更容易理解对象关系和闭包细节。
现在,你可以直接在新表达式上调用链接方法,而无需使用括号:
$result = new MyClass->someMethod()->anotherMethod();
命名空间符号清除
退出命名空间现在会清除看到的符号,从而允许跨多个命名空间块更灵活地组织代码。
与时俱进的,PHP8.4又为大伙增加了新的有用函数和新类/新方法。我们盘点如下:
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 的方法类似)
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_getcpu():获取当前CPU。
pcntl_getcpuaffinity():获取进程的CPU亲和性掩码。
pcntl_getqos_class():获取进程的 QOS 类(仅限 macOS)。
pcntl_setns():设置进程的命名空间。
pcntl_waitid():等待子进程改变状态。
Pdo\Pgsql::setNoticeCallback():设置处理 PostgreSQL 通知的回调。
各种新的 PostgreSQL 特定函数,用于高级操作。
几种与延迟对象初始化和反射相关的新方法。
AEGIS 加密算法的新功能。
SplObjectStorage::seek():将迭代器移动到特定位置。
SoapServer::__getLastResponse():获取来自 SOAP 服务器的最后一个响应。
http_get_last_response_headers():获取最后一个 HTTP 响应的标头。
http_clear_last_response_headers():清除存储的最后 HTTP 响应标头。
fpow():浮点幂函数。
array_all()与array_any()的数组实用函数。包括array_find(),array_find_key()等一序列函数。
tidyNode::getNextSibling(),tidyNode::getPreviousSibling():在 Tidy 文档中的同级节点之间导航。
创建和操作来自各种来源的 XML 的新方法。
XSLTProcessor::registerPhpFunctionNS():注册一个 PHP 函数以便在具有命名空间的 XSLT 中使用。
新的mb_*函数
如果你的项目中正在使用多字节字符串,mb_trim()将是一个受欢迎的补充。此包括mb_ltrim(),mb_rtrim(),mb_ucfirst(),mb_lcfirst()等一系列函数。
OpenSSL 扩展现在支持基于 Curve25519 和 Curve448 的密钥,以及 Argon2 密码哈希(使用 OpenSSL 3.2)。
特定于驱动程序的子类和 SQL 解析器,以提供更好的特定于数据库的功能支持。
PHP 8.4 延续了语言现代化的趋势,并使其与当前软件开发的最佳实践保持一致。
作者:军长
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。