【问题标题】:PHP Zend Engine Extension and static methodsPHP Zend 引擎扩展和静态方法
【发布时间】:2011-05-29 16:33:58
【问题描述】:

在为 php (5.3) 编写扩展时,我想访问静态方法上的 zend_class_entry 指针。

在非静态方法上,我可以像这样使用getThis() 宏和Z_OBJCE_P 宏:

zend_class_entry ce* = Z_OBJCE_P(getThis());

现在的问题: 在静态方法上,getThis() 宏返回一个null 指针,所以我不能使用Z_OBJCE_P 宏。

有没有人为我提供从静态方法访问zend_class_entry 的解决方案??

【问题讨论】:

    标签: php c php-extension php-internals


    【解决方案1】:

    真的很有趣: 在静态方法上,您可以像这样访问范围

    zend_class_entry* ce = 0L;
    if (EG(called_scope)) {
        ce = EG(called_scope);
    } else if (!EG(scope))  {
        ce = EG(scope);
    }
    

    EG 宏访问很多全局和上下文特定的变量,还有调用范围,静态方法的调用类。

    【讨论】:

    • 注意被调用的作用域和(调用的)作用域是不一样的,第一个和LSB有关,第二个大概就是你想要的了。
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2010-10-26
    • 2011-05-12
    • 1970-01-01
    • 2023-03-10
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多