]> granicus.if.org Git - php/commitdiff
Fix #44484 (define SimpleXMLElement::__toString())
authorEtienne Kneuss <colder@php.net>
Sat, 3 May 2008 15:09:24 +0000 (15:09 +0000)
committerEtienne Kneuss <colder@php.net>
Sat, 3 May 2008 15:09:24 +0000 (15:09 +0000)
ext/simplexml/simplexml.c
ext/simplexml/tests/035.phpt [new file with mode: 0644]

index 8af240c7b6f91c4e24d7ae484020f66b66a671aa..223d265a9ada51196b8ab194918c3556da8c02a2 100644 (file)
@@ -1851,6 +1851,23 @@ static int sxe_object_cast(zval *readobj, zval *writeobj, int type, void *extra
 }
 /* }}} */
 
+/* {{{ proto object SimpleXMLElement::__toString() U
+   Returns the string content */
+SXE_METHOD(__toString)
+{
+       zval           *result;
+
+       ALLOC_INIT_ZVAL(result);
+
+       if (sxe_object_cast(getThis(), result, IS_STRING, NULL TSRMLS_CC) == SUCCESS) {
+               RETURN_ZVAL(result, 1, 1);
+       } else {
+               zval_ptr_dtor(&result);
+               RETURN_EMPTY_TEXT();
+       }
+}
+/* }}} */
+
 static int sxe_count_elements(zval *object, long *count TSRMLS_DC) /* {{{ */
 {
        php_sxe_object  *sxe;
@@ -2494,6 +2511,7 @@ static const zend_function_entry sxe_functions[] = { /* {{{ */
        SXE_ME(getName,                NULL, ZEND_ACC_PUBLIC)
        SXE_ME(addChild,               NULL, ZEND_ACC_PUBLIC)
        SXE_ME(addAttribute,           NULL, ZEND_ACC_PUBLIC)
+       SXE_ME(__toString,             NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
 };
 /* }}} */
diff --git a/ext/simplexml/tests/035.phpt b/ext/simplexml/tests/035.phpt
new file mode 100644 (file)
index 0000000..962e4dc
--- /dev/null
@@ -0,0 +1,24 @@
+--TEST--
+SimpleXML: __toString
+--SKIPIF--
+<?php if (!extension_loaded("simplexml")) print "skip"; ?>
+--FILE--
+<?php
+$string = '<?xml version="1.0"?>
+<foo><bar>
+   <p>Blah 1</p>
+   <p>Blah 2</p>
+   <p>Blah 3</p>
+   <tt>Blah 4</tt>
+</bar></foo>
+';
+$foo = simplexml_load_string($string);
+$p = $foo->bar->p;
+echo $p."\n";
+echo $p->__toString()."\n";
+?>
+==Done==
+--EXPECT--
+Blah 1
+Blah 1
+==Done==