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 -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php