PHP Zend 引擎扩展和静态方法

Posted

技术标签:

【中文标题】PHP Zend 引擎扩展和静态方法【英文标题】:PHP Zend Engine Extension and static methods 【发布时间】: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 的解决方案??

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

注意被调用的作用域和(调用的)作用域是不一样的,第一个和LSB有关,第二个大概就是你想要的了。

以上是关于PHP Zend 引擎扩展和静态方法的主要内容,如果未能解决你的问题,请参考以下文章

什么是伪静态?三种实现PHP伪静态的方法介绍

zend相关

PHP Zend_Db_Statement_DB2 为静态字段返回 null

三种实现PHP伪静态页面的方法

分享常见的几种页面静态化的方法

PHP静态化技术