#27833 [Asn]: Concatenating overloaded objects fails

From: Date: Sat, 03 Apr 2004 17:24:12 +0000
Subject: #27833 [Asn]: Concatenating overloaded objects fails
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-57454@lists.php.net to get a copy of this message
ID: 27833 Updated by: andi@php.net Reported By: steph dot fox at virgin dot net Status: Assigned Bug Type: Zend Engine 2 problem Operating System: win98 PHP Version: 5CVS-2004-04-02 (dev) Assigned To: andi New Comment: In PHP 5.0 this won't be supported. __toString() will only be called automatically if it's the only argument to echo/print. Note that this does not affect internal extensions such as SimpleXML who require this to work in order to be useful. The main problem with supporting automatic __toString() calls is the fact that opcodes aren't reentrant and it requires restructuring of some of the infrastructure of the engine. Looking into this is on my TODO for post-stable 5.0. Can't promise anything though. Previous Comments: ------------------------------------------------------------------------ [2004-04-03 08:16:06] steph dot fox at virgin dot net OK, I did my research now. Sadly run-tests doesn't work on win98 due to the piping element, but I found that building PHP with zend_std_cast_object_tostring included as part of the std_object_handlers struct gets rid of all the issues & doesn't cause any new issues in ext/simplexml's test batch. (I ran them manually). Of course the other new extensions that use std_object_handlers might be adversely affected, but it's override-able (no?). It's such an easy fix (must be if I can find it!), I'm obviously missing the reason that the cast_object property's currently set as NULL. The internals list archives show a huge discussion on the subject, most of which goes straight over my head. Just looking for clarity now.. ------------------------------------------------------------------------ [2004-04-02 03:19:53] steph dot fox at virgin dot net erm, yes it does - echo $obj; // works fine echo (string) $obj; // fails - but I thought that was _meant_ to fail currently :\ Andi, when you bogus this report, could you please clarify exactly what should or shouldn't happen at this point? Docs need to reflect intended behaviour too.. ------------------------------------------------------------------------ [2004-04-02 03:13:58] derick@php.net It doesn't work without the concat either. ------------------------------------------------------------------------ [2004-04-02 02:01:51] amt@php.net The advertising is wrong. This method was changed in RC 1 to prevent some potential crashes. You can no longer concat it. Hopefully this will be fixed in PHP 5.1. ------------------------------------------------------------------------ [2004-04-02 01:56:46] steph dot fox at virgin dot net Description: ------------ __toString() works more or less as currently advertised, until I try to concat it.. Reproduce code: --------------- <?php class Foo { function __toString() { return "Blah"; } } $obj = new Foo(); echo $obj."\n"; ?> Expected result: ---------------- Blah Actual result: -------------- Object id #1 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=27833&edit=1

« previous php.bugs (#57454) next »