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 <[email protected]>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
> <[email protected]>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
>>
>>
>>
>