#32638 [Bgs]: objects cast as string explictly require a __toString when __call is defined
| From: | lsmith@php.net | Date: | Mon, 30 May 2005 08:03:24 +0000 |
| Subject: | #32638 [Bgs]: objects cast as string explictly require a __toString when __call is defined | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-79687@lists.php.net to get a copy of this message | ||
ID: 32638
Updated by: lsmith@php.net
Reported By: jason at amp-design dot net
Status: Bogus
Bug Type: Zend Engine 2 problem
Operating System: CentOS
PHP Version: 5.0.4
-Assigned To:
+Assigned To: dmitry
New Comment:
this seems to be a dupe of #30791
Previous Comments:
------------------------------------------------------------------------
[2005-05-10 03:54:18] alan_k@php.net
It's supposed to get fixed, but it's not regarded as critical, just
annoying, so It has to annoy a developer enough to fix it........
------------------------------------------------------------------------
[2005-05-09 16:14:18] jason at amp-design dot net
Out of interest/curiousity, when a bug is marked as 'bogus', what does
that mean? Although you state it's currently the expected behaviour,
are you suggesting that this could change in future releases in the
long term (i.e. next major release) maybe when you go over and review
certain issues. You seem to suggest that this might be the case in the
second from last comment in http://bugs.php.net/bug.php?id=30791.
------------------------------------------------------------------------
[2005-04-14 09:40:53] alan_k@php.net
Dupe of #30791
------------------------------------------------------------------------
[2005-04-14 09:20:04] tony2001@php.net
This is expected behaviour because __call() catches all undefined
methods, including magic ones like __toString().
You have to define __toString() or fix __call() to return appropriate
string representation of the object.
------------------------------------------------------------------------
[2005-04-08 19:49:47] jason at amp-design dot net
Description:
------------
This produces an error that should not happen. Instead, when you cast
an object to a string that has no __toString defined, it should produce
the objects internal ID. Oddly enough, the behaviour is inconsistent as
...
class A {
public function __call($name, $args) {echo $name;}
}
echo (new A);
seems to work as expected. I can't see how this should behave
differently from dereferencing from a variable.
I guess the behaviour of string casting is undefined for objects that
do not have __toString() defined, so I guess it is debateable if this
is really a bug, or a querky language "feature" ;-)
Note that this will work if one returns a value for __call().
Reproduce code:
---------------
<?php
class A {
public function __call($name, $args) {echo $name;}
}
$a = new A;
echo $a;
?>
Expected result:
----------------
Object id #insert_number_here
Actual result:
--------------
__tostring
Fatal error: Method A::__toString() must return a string value in
/data/test.php on line 21
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=32638&edit=1