Hi everybody. I'm working on an extension that creates classes, and I want to add class variables to the classes. It looks like, internally, class variables are stored in the zend_class_entry.default_properties hash. Manipulating this hash has the effect desired, however I seem to have misunderstood the memory management issues somehow; the code below causes leaks and crashes.
Is there an official way to add class variables to a class from C? Is there anything obviously wrong with the code below? Thanks!! -Tim static zend_class_entry *class_name_class_entry; static zend_class_entry tmp_class_entry; int add_default_property_null(zend_class_entry *class_entry, const char *name) { zval *property; int ret; MAKE_STD_ZVAL(property); ZVAL_NULL(property); return zend_hash_update(&class_entry->default_properties, name, strlen(name)+1, (void *)&property, sizeof(zval *), NULL); } int add_default_property_zval(zend_class_entry *class_entry, const char *name, zval **value) { zval *aval; MAKE_STD_ZVAL(aval); *aval = **value; zval_add_ref(&aval); zval_copy_ctor(aval); return zend_hash_update(&class_entry->default_properties, name, strlen(name)+1, (void *)&aval, sizeof(zval *), NULL); } void define_a_class() { /* make a class with two properties, one of which is an array */ zval *wrapper; zval *array; INIT_CLASS_ENTRY(tmp_class_entry, "class_name", class_name_functions); class_name_class_entry = zend_register_internal_class(&tmp_class_entry); add_default_property_null(class_name_class_entry, "prop_name"); MAKE_STD_ZVAL(array); array_init(array); add_next_index_string(array, "foo", 1); add_default_property_zval(class_name_class_entry, "prop_name1", &array); } -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php