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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: steph dot fox at virgin dot net
New email:
PHP Version: OS:

 

 [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

Pull Requests

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-2025 The PHP Group
All rights reserved.
Last updated: Sun Jul 13 13:01:32 2025 UTC