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
>>
>>
>>
>

Reply via email to