php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #27833 Concatenating overloaded objects fails (works in PHP6, but not in 5.1)
Submitted: 2004-04-02 01:56 UTC Modified: 2006-08-24 16:46 UTC
Votes:2
Avg. Score:5.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:0 (0.0%)
Same OS:0 (0.0%)
From: steph dot fox at virgin dot net Assigned: helly (profile)
Status: Closed Package: Scripting Engine problem
PHP Version: 5CVS-2004-04-02 (dev) OS: *
Private report: No CVE-ID: None
 [2004-04-02 01:56 UTC] 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


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-04-02 02:01 UTC] 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 03:13 UTC] derick@php.net
It doesn't work without the concat either.
 [2004-04-02 03:19 UTC] 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-03 08:16 UTC] 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-03 12:24 UTC] andi@php.net
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.
 [2006-01-06 15:35 UTC] sniper@php.net
Derick said this was fixed in HEAD, needs to be merged to PHP_5_2 
 [2006-03-18 10:55 UTC] nohn@php.net
Seems to work for PHP 5.1.3rc2-dev.
 [2006-03-18 10:57 UTC] nohn@php.net
Forget my last comment.
 [2006-08-24 16:46 UTC] tony2001@php.net
Implemented in 5_2, won't be backported to 5_1.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue May 07 10:01:32 2024 UTC