#32638 [Bgs]: objects cast as string explictly require a __toString when __call is defined

From: 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

« previous php.bugs (#79687) next »