Here's what I have so far: typedef struct _foo_class_object { zend_object std; zval *elements; int size; } foo_class_object;
static foo_class_object *foo_class_object_ptr; static zend_class_entry *foo_class_ptr; ZEND_METHOD(foo_class, __construct) { foo_class_object_ptr = (foo_class_object *)zend_object_store_get_object(getThis() TSRMLS_CC); array_init(foo_class_object_ptr->elements); } ZEND_METHOD(foo_class, add) { zval *this = getThis(); zval *item; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &item) == FAILURE) { RETURN_FALSE; } add_next_index_zval(foo_class_object_ptr->elements, item); RETURN_TRUE; } However, this doesn't work. when you call FooClass::add it causes a segfault. I'm sure I'm abusing something :) thx On Sat, Apr 7, 2012 at 2:38 PM, Matthew Hernandez <proxil...@gmail.com>wrote: > Hi Johannes, > > Yes I just found out that I should extend instead of the approach I was > thinking about. > > So I created this: > > typedef struct _foo_object { > zend_object std; > zval *array; > int size; > } foo_object; > > So the question is how do I correctly pass foo_object around so that I can > manipulate *array ? Having a private variable would mean calling getThis() > and handling it that way would be trivial. > > Are there any examples I could see? I'm using the slides from your > presentation in 2009 to help me. > > thanks > > On Sat, Apr 7, 2012 at 2:27 PM, Johannes Schlüter > <johan...@schlueters.de>wrote: > >> Hi, >> >> On Sat, 2012-04-07 at 11:23 -0700, Matthew Hernandez wrote: >> > This is my first extension I'm working on. I'm trying to make a class >> > available to the user space with 1 private property that is an array. >> >> The first question is: Why? - Why add the overhead of creating such an >> array if it is private? In most cases it is better to extend the >> zend_object in C (struct my_object { zend_object inner; type >> some_data;}) to hold private data. If you want to show it in var_dump or >> a debugger you could implement a debug_info hook. >> >> johannes >> >> >> >