Resource

资源类型,用于保存C/C++指针。

注册

  1. void string_dtor(zend_resource *res)
  2. {
  3. String *s = static_cast<String *>(res->ptr);
  4. delete s;
  5. }
  6. extension->registerResource("ResourceString", string_dtor);
  • 使用registerResource注册资源类型,参数一为资源名称,参数二为资源析构函数,用于释放对应的C++指针
  • 析构函数接受一个zend_resource类型的指针,可使用static_cast转为对应类型的指针

创建

  1. Variant v = newResource("ResourceString", new string("hello world"));
  • 使用newResource创建资源类型的PHP变量,第一个参数为资源类型名称,第二个参数为C++指针
  • 需要在C++代码中new一个对象,不得使用栈上的对象指针,否则会发生内存错误

使用

  1. Variant v = args[0];
  2. string *str = v.toResource<string>("ResourceString");
  • Variant变量可以使用toResource方法将变量转为C++的指针