|
Posted by Andy Hassall on 10/30/06 14:36
On Mon, 30 Oct 2006 14:24:45 GMT, "Andrew C" <nonsense@totally.made.up> wrote:
>I've encountered what seems to me to be something of an oddity while playing
>around with XML parsing in PHP, and I wondered if any of you might be able
>to clear up my confusion...
>
>Here's a little code:
>
>$xmlDoc = new DOMDocument();
>$xmlDoc->load('widget_data.xml');
>$widgets = $xmlDoc->getElementsByTagName('widget');
>
>My understanding was that '$widgets' is an array of elements,
Nope - it's a DOMNodeList object, that has support for PHP5 iterators, so you
can use it in a foreach loop.
>and the
>following 'foreach' iterates through that array (this works):
>
>foreach ($widgets as $widget)
>{
>...
>}
>
>However, I get an error if I try to access '$widgets' using square-brackets,
>e.g.:
>
>$widget = $widgets[0];
>
>(The error is: "Fatal error: Cannot use object of type DOMNodeList as
>array".)
There you go.
>PHP confirms that the first element of the 'array' has an index/key of '0'
>with the following (or similar), but won't let me access it directly using
>'$widgets[0]':
>
>foreach ($widgets as $key => $widget)
>{
>echo("<p>" . $key . "</p>\n");
>}
>
>Does anyone have an explanation as to why a DOMNodeList can be accessed like
>an array using 'foreach', but won't allow square-brackets to be used? What
>exactly *is* a DOMNodeList?
>
>Thanks for any help.
>
>A.
>
>PS. I am aware that DOMNodeLists have an 'item()' method with which nodes
>within the list can be referred to via index, but my confusion still stands
>as to why I can't simply use '[]'s.
PHP doesn't support overloading operators, which I believe would be required
for supporting [] on objects implementing the appropriate interface.
Would be a sensible extension to the current functionality, though - as you
point out, DOMNodeList acts almost the same as an array, but not quite close
enough.
Failing that, it'd be somewhat useful if DOMNodeList had a method to convert
itself into an actual array, but it doesn't seem to have that either.
--
Andy Hassall :: andy@andyh.co.uk :: http://www.andyh.co.uk
http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
[Back to original message]
|