mirror of
https://github.com/php/php-src.git
synced 2024-09-29 05:46:06 +00:00
735bec4f40
The code was storing the created object in a property on the created object, creating a trivial cycle. This cycle cannot be collected (even if sxe->tmp is exposed via get_gc), because it is never rooted (and we cannot safely manually root it). Change the code to store the created object on the parent node instead. The only reason this is not showing up as a leak is that sxe->tmp is dtor'ed in the dtor handler, which means that these objects do get collected on shutdown -- but never earlier. |
||
---|---|---|
.. | ||
examples | ||
tests | ||
config.m4 | ||
config.w32 | ||
CREDITS | ||
php_simplexml_exports.h | ||
php_simplexml.h | ||
README | ||
simplexml.c | ||
sxe.c | ||
sxe.h |
SimpleXML is meant to be an easy way to access XML data. SimpleXML objects follow four basic rules: 1) properties denote element iterators 2) numeric indices denote elements 3) non numeric indices denote attributes 4) string conversion allows to access TEXT data When iterating properties then the extension always iterates over all nodes with that element name. Thus method children() must be called to iterate over subnodes. But also doing the following: foreach ($obj->node_name as $elem) { // do something with $elem } always results in iteration of 'node_name' elements. So no further check is needed to distinguish the number of nodes of that type. When an elements TEXT data is being accessed through a property then the result does not include the TEXT data of subelements. Known issues ============ Due to engine problems it is currently not possible to access a subelement by index 0: $object->property[0]. TODO ==== At the moment property access to multiple elements of the same name returns an array of SimpleXML objects. This should be an object of a new type instead so that all kinds of linkage, assignment and deleting would work.