__attribute __((构造函数))在共享库和zend php扩展中

时间:2014-04-23 22:29:47

标签: php c++ attributes

我有一个c ++共享库,它同时由nodejs和php扩展使用。 即时通讯面临着关于c ++库中共享变量的奇怪问题。 我有我的c ++库

vector<string> support_list;

void _generateSupporList() {
    //.....
    support_list.push_back("test1");
}

void __attribute__ ((constructor)) lib_init(void) {
     // when this code is called the php extension will always see 1 element in the array 
    _generateSupporList();
}

myClass {
    public: 
        appendSupportedList();
}
myClass::appendSupportedList(string item){
    cout << support_list.size();
    // when i append the same array i'll have 2 elements temporarily.. but when i do another call(new user request from browser) i'll see one element only "test1"..
    support_list.push_back(item);
}

现在假设我们有用户请求 - &gt; http://example.com/test.php?append=val
在test.php中我调用php扩展,后者又调用c ++ api。

所以在test.php中:

  $class = new myClass();//defined in the php extension
  $class->appendSupportedList($_GET['append']); //this line will append support_list with "val"..

另一位用户请求了同一页面 - &gt; http://example.com/test.php?append=val2执行相同的代码,我们将在support_list中添加一个新项目。

当用户调用test.php 10次时,我总是得到相同的support_list大小。
我希望从上面的代码中得到 请求1 - &gt; support_list.size()= 1
请求2 - &gt; support_list.size()= 2
请求3 - &gt; support_list.size()= 3

但我总是有support_list.size()= 1 //这是“lib_init”添加的那个

0 个答案:

没有答案