Commit: 7b307fb930e6cf328993dee4b060f6f823c39d24 Author: Xinchen Hui <larue...@php.net> Sun, 12 Aug 2012 11:50:28 +0800 Parents: d4f9bbfae248687c1aa68370564b14544eb4eafd Branches: PHP-5.4
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=7b307fb930e6cf328993dee4b060f6f823c39d24 Log: Fixed bug #62328 (implementing __toString and a cast to string fails) __toString should has a high priority Bugs: https://bugs.php.net/62328 Changed paths: M NEWS M Zend/zend.c A ext/xml/tests/bug62328.phpt Diff: diff --git a/NEWS b/NEWS index 60fe2b9..6efc0df 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,8 @@ PHP NEWS ?? ??? 2012, PHP 5.4.7 - Core: + . Fixed bug #62328 (implementing __toString and a cast to string fails) + (Laruence) . Fixed bug #62725 (Calling exit() in a shutdown function does not return the exit value). (Laruence) . Fixed bug #51363 (Fatal error raised by var_export() not caught by error diff --git a/Zend/zend.c b/Zend/zend.c index 18c4f11..09338e7 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -258,6 +258,9 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop { TSRMLS_FETCH(); + if (zend_std_cast_object_tostring(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) { + break; + } if (Z_OBJ_HANDLER_P(expr, cast_object)) { zval *val; @@ -270,12 +273,6 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop } zval_ptr_dtor(&val); } - /* Standard PHP objects */ - if (Z_OBJ_HT_P(expr) == &std_object_handlers || !Z_OBJ_HANDLER_P(expr, cast_object)) { - if (zend_std_cast_object_tostring(expr, expr_copy, IS_STRING TSRMLS_CC) == SUCCESS) { - break; - } - } if (!Z_OBJ_HANDLER_P(expr, cast_object) && Z_OBJ_HANDLER_P(expr, get)) { zval *z = Z_OBJ_HANDLER_P(expr, get)(expr TSRMLS_CC); diff --git a/ext/xml/tests/bug62328.phpt b/ext/xml/tests/bug62328.phpt new file mode 100644 index 0000000..e4c3c59 --- /dev/null +++ b/ext/xml/tests/bug62328.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #62328 (implementing __toString and a cast to string fails) +--SKIPIF-- +<?php +require_once("skipif.inc"); +?> +--FILE-- +<?php +class UberSimpleXML extends SimpleXMLElement { + public function __toString() { + return 'stringification'; + } +} + +$xml = new UberSimpleXML('<xml/>'); + +var_dump((string) $xml); +var_dump($xml->__toString()); +--EXPECT-- +string(15) "stringification" +string(15) "stringification" -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php