php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #37537 __toString documentation update
Submitted: 2006-05-21 05:27 UTC Modified: 2007-08-17 21:30 UTC
From: mfischer@php.net Assigned:
Status: Closed Package: Documentation problem
PHP Version: 5.2.0 OS: Any
Private report: No CVE-ID: None
 [2006-05-21 05:27 UTC] mfischer@php.net
Description:
------------
From zend_object_handlers.c:

zend_error(E_ERROR, "Method %v::__toString() must not throw an exception", ce->name);

This is due the recent changes that from now on __toString will be called everywhere an object is used in a string context.

Good page candidates are:
http://de.php.net/manual/en/language.exceptions.php
http://de.php.net/manual/en/language.oop5.magic.php


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-05-26 12:13 UTC] bjori@php.net
http://php.net/oop5.magic#language.oop5.magic.tostring 
needs an updated before 5.2.0.

#1 Can't throw exceptions anymore
#2 Is called 'wherever it's appropriate' (e. 
printf("__toString: %s", $obj))

If language.exceptions will be updated to note where 
exceptions can't be thrown it'll need to note lot more then 
just __toString()
 [2006-05-29 06:01 UTC] mfischer@php.net
I had a small conversation with the autor on internals@ and it is very important, because you gave the printf example, that __toString() will only be called if an stirng modified %s is encountered. If it's %d for integer, __toString() is not called.

This may or may not be expected, but it's the current implementation. Should I file another report for it?
 [2006-05-29 11:52 UTC] bjori@php.net
No you shouldn't.
IMO it's quite clear that __toString wouldn't be called 
with %i or %e or anything else than %s. But I guess there 
is no harm in documenting that too..
 [2006-05-29 12:45 UTC] mfischer@php.net
I don't think it's *that* clear.

Consider that when you pass a "string" to %d guess what -> it works, the string is converted to an int. But in case of an object, it does not work this way automatically. If you would write (string)$obj it again would work.

I don't consider this as clear as blue sky. :)
 [2007-06-20 19:05 UTC] bjori@php.net
See also bug#41750
 [2007-08-17 21:30 UTC] vrana@php.net
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation better.

"Since PHP 5.2.0, __toString() is called in any string context (e.g. in printf() with %s modifier) but not in other types contexts (e.g. with %d modifier)."
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 18 19:01:30 2024 UTC