Re: Cloning of objects passed as parameters
| From: | Marcus Boerger | Date: | Tue, 10 Mar 2009 20:03:19 +0000 |
| Subject: | Re: Cloning of objects passed as parameters | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-43298@lists.php.net to get a copy of this message | ||
Hello Frankie,
Tuesday, March 10, 2009, 5:19:32 PM, you wrote:
> I'm writing a PHP class with a method that has to be passed a
> DOMDocument object, and it needs to retain that object throughout the
> life of its instantiation. However, the (dom_object *) returned from
> zend_parse_method_parameters is just a pointer to the passed object,
> and so it disappears when the original document is unset or goes out of
> scope. How would one go about cloning the DOMDocument to save in the
> class's struct?
> example:
> ZEND_METHOD(xydelta, setStartDocument) {
> zval *id, *doc = NULL;
> xydelta_object *intern;
> if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(),
> "Oo", &id, xydelta_ce, &doc) == FAILURE) {
> RETURN_FALSE;
> }
> intern = (xydelta_object *)zend_object_store_get_object(id TSRMLS_CC);
> if (intern != NULL) {
> // Error checking removed for brevity...
> // ...
> // This pointer cannot be accessed once the object that was used as
> the first parameter goes out of scope
> intern->libxml_start_doc = (php_libxml_node_object *)
> zend_object_store_get_object(doc TSRMLS_CC);
> }
> }
DOMDocuments are reference counted, hence zou can simplz increase their
refcount when storing the connection and delete the ref when dropping the
connection, probably in your destructor.
Best regards,
Marcus