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

Reply via email to