繁体   English   中英

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

[英]Migrate to PHP 8.0: array_key_exists() improved performance… not understood

一步一步,我将我的项目从PHP 7.1迁移到PHP 8.0

在官方 PHP 手册中,在“从 PHP 7.3.x 迁移到 PHP 7.x章节的“其他更改”子章节中,尝试理解以下段落7。

array_key_exists() function 添加了一个专门的 VM 操作码,如果可以静态解析,它会提高此 function 的性能。 在命名空间代码中,这可能需要编写 \array_key_exists() 或显式导入 function。

虽然,它的这些部分我真的不能理解:

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

也许你能帮助我?

非常感谢您的宝贵时间!

我相信这里的“分辨率”是关于明确地将名称指向内置 function。 例子:

namespace foo;

array_key_exists('bar', $baz);

function array_key_exists() {}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM