如何在PHP扩展类中设置静态类属性?
我正在用C编写一个PHP扩展,其中包括C中定义的PHP类。我想在其中一个类上设置一个静态属性。特别是,我想在C中做相当于如何在PHP扩展类中设置静态类属性?,php,c,php-extension,Php,C,Php Extension,我正在用C编写一个PHP扩展,其中包括C中定义的PHP类。我想在其中一个类上设置一个静态属性。特别是,我想在C中做相当于 class Example{ public static $member; } Example::member = new Example(); 我不能使用REGISTER\u*\ u常量宏来执行此操作,因为该值需要是一个对象。我查看了官方文档,但是关于类的部分是空的。您实际上无法注册静态属性,您只需更新它,让PHP为您注册即可 在我的特定情况下,我的类包装了一个C
class Example{
public static $member;
}
Example::member = new Example();
我不能使用
REGISTER\u*\ u常量
宏来执行此操作,因为该值需要是一个对象。我查看了官方文档,但是关于类的部分是空的。您实际上无法注册静态属性,您只需更新它,让PHP为您注册即可
在我的特定情况下,我的类包装了一个C结构,因此我显然无法在模块初始化时初始化它。我选择了下一个最好的选择,那就是声明一个静态方法,该方法返回一个静态声明的实例。我是这样做的
PHP_ME(Example, member, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
在我的example\u方法
数组中,通过在头文件中全局声明zval*php\u example\u static\u成员
,并将函数编写为
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);
}
这看起来是正确的函数,但我无法验证它是否符合我的要求,因为我想在
PHP\u MINIT\u function
中调用它,但它看起来有一些东西(可能是executor\u globals
)到那时还没有初始化。
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);
}