Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:8547 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 36325 invoked by uid 1010); 16 Mar 2004 22:47:51 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 36282 invoked from network); 16 Mar 2004 22:47:50 -0000 Received: from unknown (HELO shiva.mind.de) (212.42.230.204) by pb1.pair.com with SMTP; 16 Mar 2004 22:47:50 -0000 Received: from [192.168.1.105] (p508EABAF.dip.t-dialin.net [80.142.171.175]) by shiva.mind.de (Postfix) with ESMTP id D980497B4F; Tue, 16 Mar 2004 23:47:49 +0100 (CET) Date: Tue, 16 Mar 2004 23:45:46 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <162807636437.20040316234546@marcus-boerger.de> To: Andi Gutmans , Timm Friebe Cc: internals@lists.php.net In-Reply-To: <1079472144.266.12.camel@localhost> References: <1079472144.266.12.camel@localhost> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] Exception::__toString() not called From: helly@php.net (Marcus Boerger) Hello Timm, hello Andi, i htought i had a better solution to the __toString() problem. But then i found out why we made it so complex. The reason IIRC was to prevent __toString() being called everywhere automatically when it is a user function. Havin said this the solution is very easy. We expand the signature of cast_object to inform about exactly this - whether user space functions may be called or not. From _convert_to_string() we set that param to zero and from make_printable_zval we set it to 1 and inside the cast function we only need to verify the type of the function if necessary. Even better would be to add a flag that disallows usercode functions. Because with such a flag we do not have a problem if a conversion calls an internal method which then calls a userspace function which it shouldn't. Anid? Tuesday, March 16, 2004, 10:22:24 PM, you wrote: > Hi, > Both of the following examples used to output the > Exception::__toString() output, which they don't anymore: > $ php-dev -r '$e= new Exception(); echo $e, "\n";' > Object id #1 > $ php-dev -r '$e= new Exception(); echo (string)$e, "\n";' > Object id #1 > Works fine for userland objects: > $ php-dev -r 'class Foo { function __toString() { return "foo"; }} echo > new Foo(), "\n";' > foo > - Timm -- Best regards, Marcus mailto:helly@php.net