diff options
author | Marcus Boerger <helly@php.net> | 2003-09-18 11:38:33 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2003-09-18 11:38:33 +0000 |
commit | d7fdf15a413de33953a2060b22c58b87f2f06abb (patch) | |
tree | faf00211c24f74a772ca6dff1a33fefd8f9bbc05 /Zend/zend_operators.c | |
parent | 87045df4ce1137b7604ed9a767b78eeaebe79b5e (diff) | |
download | php-git-d7fdf15a413de33953a2060b22c58b87f2f06abb.tar.gz |
- Allow partial type conversion support for objects.
- Add support for object to string conversion from userspace by method
__toString() and add a test.
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r-- | Zend/zend_operators.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 257ea583e0..8f3b73fcdc 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -488,14 +488,20 @@ ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC) break; case IS_OBJECT: if (op->value.obj.handlers->cast_object) { + zval tmp; TSRMLS_FETCH(); - op->value.obj.handlers->cast_object(op, op, IS_STRING, 1 TSRMLS_CC); + if (op->value.obj.handlers->cast_object(op, &tmp, IS_STRING, 1 TSRMLS_CC) == SUCCESS) { + zval_dtor(op); + *op = tmp; + break; + } + zend_error(E_NOTICE, "Object of class %s could not be converted to string", Z_OBJCE_P(op)->name); } else { - zval_dtor(op); - op->value.str.val = estrndup_rel("Object", sizeof("Object")-1); - op->value.str.len = sizeof("Object")-1; - zend_error(E_NOTICE, "Object to string conversion"); + zend_error(E_NOTICE, "Object of class %s to string conversion", Z_OBJCE_P(op)->name); } + zval_dtor(op); + op->value.str.val = estrndup_rel("Object", sizeof("Object")-1); + op->value.str.len = sizeof("Object")-1; break; default: zval_dtor(op); |