Hello Jon, Saturday, January 3, 2004, 2:21:12 AM, you wrote:
> 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. Why do you make it so complicated? You could imply provide a list of methods for your objects and register them with the third parameter of INIT_CLASS_ENTRY() macro. That would handle the constructor correct. Also you should name the constructor '__construct' instead of 'python' because the former is the prefered way for ZE2. -- Best regards, Marcus mailto:[EMAIL PROTECTED] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php