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