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