helly Mon Oct 31 15:29:34 2005 EDT
Added files:
/php-src/ext/spl/tests sxe_005.phpt
Modified files:
/php-src/ext/spl spl.php spl_sxe.c
Log:
- Make SimpleXMLIterator implement Countable
http://cvs.php.net/diff.php/php-src/ext/spl/spl.php?r1=1.61&r2=1.62&ty=u
Index: php-src/ext/spl/spl.php
diff -u php-src/ext/spl/spl.php:1.61 php-src/ext/spl/spl.php:1.62
--- php-src/ext/spl/spl.php:1.61 Mon Oct 10 17:06:54 2005
+++ php-src/ext/spl/spl.php Mon Oct 31 15:29:29 2005
@@ -932,7 +932,7 @@
* has subelements, hasChildren() returns true. This will trigger a call to
* getChildren() which returns the iterator for that sub element.
*/
-class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator
+class SimpleXMLIterator extends SimpleXMLElement implements RecursiveIterator,
Countable
{
/** @return whether the current node has sub nodes.
*/
@@ -941,6 +941,10 @@
/** @return a SimpleXMLIterator for the current node.
*/
function getChildren();
+
+ /** @return number of elements/attributes seen with foreach()
+ */
+ function count();
}
/** @ingroup SPL
http://cvs.php.net/diff.php/php-src/ext/spl/spl_sxe.c?r1=1.14&r2=1.15&ty=u
Index: php-src/ext/spl/spl_sxe.c
diff -u php-src/ext/spl/spl_sxe.c:1.14 php-src/ext/spl/spl_sxe.c:1.15
--- php-src/ext/spl/spl_sxe.c:1.14 Sat Oct 29 16:37:59 2005
+++ php-src/ext/spl/spl_sxe.c Mon Oct 31 15:29:29 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_sxe.c,v 1.14 2005/10/29 20:37:59 helly Exp $ */
+/* $Id: spl_sxe.c,v 1.15 2005/10/31 20:29:29 helly Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -32,6 +32,7 @@
#include "spl_engine.h"
#include "spl_iterators.h"
#include "spl_sxe.h"
+#include "spl_array.h"
zend_class_entry *spl_ce_SimpleXMLIterator = NULL;
zend_class_entry *spl_ce_SimpleXMLElement;
@@ -135,6 +136,15 @@
return_value->value.obj = zend_objects_store_clone_obj(sxe->iter.data
TSRMLS_CC);
}
+SPL_METHOD(SimpleXMLIterator, count) /* {{{ */
+{
+ long count = 0;
+
+ Z_OBJ_HANDLER_P(getThis(), count_elements)(getThis(), &count TSRMLS_CC);
+
+ RETURN_LONG(count);
+}
+
static zend_function_entry spl_funcs_SimpleXMLIterator[] = {
SPL_ME(SimpleXMLIterator, rewind, NULL, ZEND_ACC_PUBLIC)
SPL_ME(SimpleXMLIterator, valid, NULL, ZEND_ACC_PUBLIC)
@@ -143,6 +153,7 @@
SPL_ME(SimpleXMLIterator, next, NULL, ZEND_ACC_PUBLIC)
SPL_ME(SimpleXMLIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
SPL_ME(SimpleXMLIterator, getChildren, NULL, ZEND_ACC_PUBLIC)
+ SPL_ME(SimpleXMLIterator, count, NULL, ZEND_ACC_PUBLIC)
{NULL, NULL, NULL}
};
/* }}} */
@@ -161,6 +172,7 @@
REGISTER_SPL_SUB_CLASS_EX(SimpleXMLIterator, SimpleXMLElement,
spl_ce_SimpleXMLElement->create_object, spl_funcs_SimpleXMLIterator);
REGISTER_SPL_IMPLEMENTS(SimpleXMLIterator, RecursiveIterator);
+ REGISTER_SPL_IMPLEMENTS(SimpleXMLIterator, Countable);
return SUCCESS;
}
http://cvs.php.net/co.php/php-src/ext/spl/tests/sxe_005.phpt?r=1.1&p=1
Index: php-src/ext/spl/tests/sxe_005.phpt
+++ php-src/ext/spl/tests/sxe_005.phpt
--TEST--
SPL: SimpleXMLIterator and getChildren()
--SKIPIF--
<?php
if (!extension_loaded("spl")) print "skip";
if (!extension_loaded('simplexml')) print 'skip';
if (!extension_loaded("libxml")) print "skip LibXML not present";
if (!class_exists('RecursiveIteratorIterator')) print 'skip
RecursiveIteratorIterator not available';
?>
--FILE--
<?php
$xml =<<<EOF
<?xml version='1.0'?>
<sxe>
<elem1/>
<elem2/>
<elem2/>
</sxe>
EOF;
class SXETest extends SimpleXMLIterator
{
function count()
{
echo __METHOD__ . "\n";
return parent::count();
}
}
$sxe = new SXETest($xml);
var_dump(count($sxe));
var_dump(count($sxe->elem1));
var_dump(count($sxe->elem2));
?>
===DONE===
--EXPECT--
SXETest::count
int(3)
SXETest::count
int(1)
SXETest::count
int(2)
===DONE===
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php