Fixed bug #62328 (implementing __toString and a cast to string fails)

__toString should has a high priority
This commit is contained in:
Xinchen Hui 2012-08-12 11:50:28 +08:00
parent d4f9bbfae2
commit 7b307fb930
3 changed files with 26 additions and 6 deletions

2
NEWS
View File

@ -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

View File

@ -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);

View File

@ -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"