如何解决迁移到 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 举报,一经查实,本站将立刻删除。