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

Reply via email to