Re: Custom object creation and reference counts
| From: | Jon Parise | Date: | Sat, 03 Jan 2004 00:28:42 +0000 |
| Subject: | Re: Custom object creation and reference counts | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-6752@lists.php.net to get a copy of this message | ||
On Fri, Jan 02, 2004 at 04:09:21PM -0800, Andrei Zmievski wrote:
> > Why is my object being treated as a reference while the native PHP
> > object is not?
>
> I guess that is a question for you really: are you doing anything
> special to make your object a reference? I've used the new object model
> for PHP-GTK and my objects were not treated as references.
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).
> > 'variable_ptr->refcount=1;' resets the reference count of the
> > variable's zval to 1, but the underlying _store_object's reference
> > count is still incremented. What will ever reclaim that reference on
> > the _store_object?
>
> zval_dtor() will. It calls del_ref on the underlying object.
I see. I would have to call zval_dtor() myself in any of the cases
where I knowingly created an additional reference. That makes sense.
--
Jon Parise (jon@php.net) :: The PHP Project (http://www.php.net/)