Re: Custom object creation and reference counts

From: Date: Sat, 03 Jan 2004 01:21:12 +0000
Subject: Re: Custom object creation and reference counts
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-6755@lists.php.net to get a copy of this message
On Fri, Jan 02, 2004 at 05:00:33PM -0800, Andrei Zmievski wrote: > > It appears to be a side-effect of not defining the 'scope' field in > > the zend_internal_function call that is invokved from my custom > > 'constructor_get' handler. If the 'scope' field is NULL, my object > > is treated as a reference. If I assign my class entry to the 'scope' > > field, the object is "normal" (i.e. not a reference). > > Hmm, can I see the code? Here's my constructor function definition: zend_internal_function php_python_constructor_function = { ZEND_INTERNAL_FUNCTION, /* type */ "python", /* function_name */ &python_class_entry, /* scope */ 0, /* fn_flags */ NULL, /* prototype */ 0, /* num_args */ NULL, /* arg_info */ 0, /* pass_rest_by_reference */ ZEND_FN(python_new) /* handler */ }; I use this function as part of my class initialization: INIT_CLASS_ENTRY(python_class_entry, "python", NULL); python_class_entry.create_object = python_object_create; python_class_entry.constructor = (union _zend_function *)&php_python_constructor_function; zend_register_internal_class(&python_class_entry TSRMLS_CC); And I return the 'constructor' value from my 'constructor_get' handler: static union _zend_function * python_constructor_get(zval *object TSRMLS_DC) { php_python_object *obj = PIP_FETCH(object); return obj->ce->constructor; } If I specify NULL for the 'scope' field, I end up with a second reference to the new object. I don't know if that's intentional or a bug. I'm still getting familiar with the new object model code. -- Jon Parise (jon@php.net) :: The PHP Project (http://www.php.net/)

« previous php.internals (#6755) next »