迁移到 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.4.x", 我试着去理解 the following paragraph:
A specialized VM opcode for the array_key_exists() function has
been added, which improves performance of this function if it can be
statically resolved. In namespaced code, this may require writing
\array_key_exists() or explicitly importing the function.
虽然,这部分我不是很理解:
- 这是什么意思:" [...] 如果可以静态解析。"?请注意,在我的项目代码中,我根本没有静态方法。
- 我必须在这种情况下实际做些什么:在命名空间代码中,这可能需要编写 \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
,则 parser/compiler 会将其替换为更快的操作码。为此,代码必须没有命名空间,或者明确使用 \array_key_exists
.
一步一步,我正在将我的项目从 PHP 7.1 迁移到 PHP 8.0.
在官方 PHP 手册中,在第 章的 “其他更改” 子章中“从 PHP 7 迁移。 3.x 到 PHP 7.4.x", 我试着去理解 the following paragraph:
A specialized VM opcode for the array_key_exists() function has been added, which improves performance of this function if it can be statically resolved. In namespaced code, this may require writing \array_key_exists() or explicitly importing the function.
虽然,这部分我不是很理解:
- 这是什么意思:" [...] 如果可以静态解析。"?请注意,在我的项目代码中,我根本没有静态方法。
- 我必须在这种情况下实际做些什么:在命名空间代码中,这可能需要编写 \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
,则 parser/compiler 会将其替换为更快的操作码。为此,代码必须没有命名空间,或者明确使用 \array_key_exists
.