php-src/ext/simplexml
Nikita Popov 122d759618 Always throw TypeException on throwing zpp failures
Introduces a ZEND_PARSE_PARAMS_THROW flag for zpp, which forces to
report FAILURE errors using a TypeException instead of a Warning,
like it would happen in strict mode.

Adds a zend_parse_parameters_throw() convenience function, which
invokes zpp with this flag.

Converts all cases I could identify, where we currently have
throwing zpp usage in constructors and replaces them with this API.
Error handling is still replaced to EH_THROW in some cases to handle
other, domain-specific errors in constructors.
2015-04-06 11:27:34 +02:00
..
examples update the examples 2004-01-17 21:44:22 +00:00
tests Errors converted to exceptions are not "recoverable" anymore. 2015-03-10 10:31:55 +03:00
config.m4 Merge branch 'PHP-5.5' 2013-08-06 11:09:12 -07:00
config.w32 more fixes to the shared compilation 2015-03-23 15:09:09 +01:00
CREDITS Fix writing of SQLite and SimpleXMl extension and add Rob to the credits 2004-03-28 20:27:18 +00:00
php_simplexml_exports.h bump year 2015-01-15 23:27:30 +08:00
php_simplexml.h cleanup mod version macros and mod defs, round x 2015-03-23 21:30:22 +01:00
README - Fix typoes 2004-01-17 20:20:18 +00:00
simplexml.c Always throw TypeException on throwing zpp failures 2015-04-06 11:27:34 +02:00
sxe.c export useful symbols from ext/simplexml 2015-03-23 18:33:37 +01:00
sxe.h export useful symbols from ext/simplexml 2015-03-23 18:33:37 +01:00

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.