我正在尝试为 php5.4 编写一个扩展,它基本上在 CPP 中包装了一个非常简单的类。
这是出于教育目的。
我发现在 php5.4 中执行此操作的方法已从 php5.3 更改
我在哪里可以找到有关如何操作的文档?或者更好的是,代码示例,任何其他包装 CPP 类并在 php5.4 中工作的扩展
例如,以前有效,现在不再有效。取自http://devzone.zend.com/1435/wrapping-c-classes-in-a-php-extension/
zend_object_value car_create_handler(zend_class_entry *type TSRMLS_DC)
{
zval *tmp;
zend_object_value retval;
car_object *obj = (car_object *)emalloc(sizeof(car_object));
memset(obj, 0, sizeof(car_object));
obj->std.ce = type;
ALLOC_HASHTABLE(obj->std.properties);
zend_hash_init(obj->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
zend_hash_copy(obj->std.properties, &type->default_properties,
(copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *));
retval.handle = zend_objects_store_put(obj, NULL,
car_free_storage, NULL TSRMLS_CC);
retval.handlers = &car_object_handlers;
return retval;
}
该行将
zend_hash_copy(obj->std.properties, &type->default_properties,
(copy_ctor_func_t)zval_add_ref, (void *)&tmp, sizeof(zval *));
失败,因为结构实例type
(忘记它的定义)不再具有成员default_properties