Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP扩展类中设置静态类属性?_Php_C_Php Extension - Fatal编程技术网

如何在PHP扩展类中设置静态类属性?

如何在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

我正在用C编写一个PHP扩展,其中包括C中定义的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);
}