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 引擎扩展和静态方法的主要内容,如果未能解决你的问题,请参考以下文章