hi: You can refer to ext spl array Thanks
Sent from my iPhone 在 2012-4-8,7:12,Matthew Hernandez <proxil...@gmail.com> 写道: > 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 >>> >>> >>> >> -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php