zend / php是否为执行数据中某处的功能缓存哈希码?

马拉松

编辑:明确地说,我想识别并跟踪被调用的函数,而不会引起对class.function字符串进行哈希处理的开销和歧义。我希望php保留一些内部哈希值。

我正在开发扩展程序,我想要一种可靠的方式来获取特定的哈希码zend_execute_data->zend_function,而无需在函数名称上调用某些哈希函数的开销(无论如何,这将导致与重载函数发生冲突)。

_zend_execute_data.opline具有一个名为“ extended_value”的字段,看起来像对op1中的内容设置了zend_hash_function的值一样,但前提是op2是常量。

if (opline->op2.op_type == IS_CONST) {
    ...
    opline->extended_value = zend_hash_func(Z_STRVAL(opline->op1.u.constant), Z_STRLEN(opline->op1.u.constant) + 1);

我不确定op2类型IS_CONST是什么意思,也不确定这是否可靠。而且我不确定此哈希码是否用于函数定义或类中的特定实例。

编辑:我猜IS_CONST意味着该函数不是对象实例的成员。

还有什么可以用作execute_data-> zend_function的哈希代码代理的吗?

尼基

一种非常简单的方法是使用zend_function *自身的指针索引到哈希表中。(unsigned long) (uintptr_t) func用作索引。

这种方法有一个警告:尽管函数/方法通常zend_function *在脚本的生存期内具有唯一性,但在某些情况下(如__call魔术),zend_function *会分配一个临时结构。在这些情况下,ZEND_ACC_CALL_VIA_HANDLER将在功能上设置标志。如果还想支持这些情况,则必须为它们使用单​​独的机制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Zend PHP中的Zend \ ServiceManager \ Exception \ ServiceNotCreatedException

来自分类Dev

zend注册表VS zend缓存

来自分类Dev

zend注册表VS zend缓存

来自分类Dev

Zend Flashdata是否存在?

来自分类Dev

在zend框架中的位置

来自分类Dev

在zend框架中时

来自分类Dev

Zend验证码问题

来自分类Dev

如何检查是否已安装Zend Optimizer或Zend Guard Loader

来自分类Dev

使用和配置Zend会话和Zend缓存Memcached-Zend Framework 2.3

来自分类Dev

装饰器Zend Framework PHP

来自分类Dev

从Zend PHP连接到Hana

来自分类Dev

Zend Framework中的'Zend_Session_Exception错误

来自分类Dev

Zend Framework 2中的路由

来自分类Dev

在jQuery中触发Zend FlashMessenger

来自分类Dev

Zend框架中的Ajax / Jquery

来自分类Dev

在Zend中编写SQL查询

来自分类Dev

Zend中的Json Encode数组

来自分类Dev

Zend Framework 2中的ZendSearch

来自分类Dev

Zend addScriptPath在postDispatch中吗?

来自分类Dev

Zend中authenticate()操作的问题

来自分类Dev

Zend 2中的MySQL函数

来自分类Dev

Zend 框架中的 Ajax Post

来自分类Dev

Zend InputFilter是否需要intl PHP扩展?

来自分类Dev

在Zend Framework中缓存数据库查询结果

来自分类Dev

Zend 2重定向(错误或功能)?

来自分类Dev

在Zend PHP框架中执行内部联接

来自分类Dev

为Eclipse PDT安装/配置Zend Debugger

来自分类Dev

Zend_Form和数据转义

来自分类Dev

Zend Framework 2:数据库配置