我在C中编写了一个PHP扩展,其中包含在C中定义的PHP类。我想在其中一个类上设置静态属性。特别是,我想在C中做相当于
的事情class Example{
public static $member;
}
Example::member = new Example();
我不能使用REGISTER_*_CONSTANT
宏来执行此操作,因为该值必须是一个对象。我检查了官方文档,但关于类的部分是空的。
答案 0 :(得分:1)
您实际上无法注册静态属性,只需更新它,并让PHP为您进行注册。
http://php.undmedlibrary.org/manual/en/zend-api.zend-update-static-property.php
// int zend_update_static_property ( zend_class_entry* $scope, char* $name, int $name_length, zval* $value, magic $TSRMLS_DC )
int prop_set = zend_update_static_property ( my_example_class_entry, "member", 7, my_instance TSRMLS_CC);
答案 1 :(得分:1)
在我的特定情况下,我的类包装了一个C结构,所以我显然无法在模块初始化时初始化它。我采用了下一个最佳选项,即声明一个返回静态声明实例的静态方法。我通过放行
来做到这一点PHP_ME(Example, member, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
在我的example_methods
数组中,通过在我的头文件中全局声明zval *php_example_static_member
,并将该函数写为
PHP_METHOD(Example, member){
if(php_example_static_member == NULL){
php_example_static_member = create_example_instance(); //However the new instance is created
}
RETURN_ZVAL(php_example_static_member, false, false);
}