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 ([EMAIL PROTECTED]) :: The PHP Project (http://www.php.net/) -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php