微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

迁移到 PHP 8.0:array_key_exists() 提高了性能......不明白

如何解决迁移到 PHP 8.0:array_key_exists() 提高了性能......不明白

我正在逐步将我的项目从 PHP 7.1 迁移到 PHP 8.0

在官方PHP手册中,在“Migrating from PHP 7.3.x to PHP 7.4.x”一章的子章节“Other Changes”中,我试图了解the following paragraph

array_key_exists() 函数的专用 VM 操作码具有 已添加,如果可以的话,可以提高此功能性能 静态解决。在命名空间代码中,这可能需要编写 \array_key_exists() 或显式导入函数

尽管如此,我无法真正理解其中的这些部分:

  • 这是什么意思:“[...] 如果可以静态解析。”?请注意,在我的项目代码中,我根本没有静态方法
  • 在这种情况下,我真的必须做些什么吗:在命名空间代码中,这可能需要编写 \array_key_exists() 或显式导入函数?请注意,我的项目使用的是 namespaces

也许你能帮我?

非常感谢您的时间!

解决方法

我相信这里的“解析”是关于明确地将名称指向内置函数。示例:

namespace foo;

array_key_exists('bar',$baz);

function array_key_exists() {}

在此代码中,函数调用将引用自定义定义的 foo\array_key_exists,并且只能在运行时根据名称解析规则进行解析。该函数也可能在其他时间在其他文件中定义,该文件包含在其他地方,但仍会定义函数foo\array_key_exists,因此无法过早解决。

但是,如果源代码中的 array_key_exists(...) 调用明确引用 PHP 的内置 array_key_exists,解析器/编译器将用更快的操作码替换它。为此,代码必须没有命名空间,或者明确使用 \array_key_exists

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。