Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:8548 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 49002 invoked by uid 1010); 16 Mar 2004 22:54:25 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 48944 invoked from network); 16 Mar 2004 22:54:24 -0000 Received: from unknown (HELO shiva.mind.de) (212.42.230.204) by pb1.pair.com with SMTP; 16 Mar 2004 22:54:24 -0000 Received: from [192.168.1.105] (p508EABAF.dip.t-dialin.net [80.142.171.175]) by shiva.mind.de (Postfix) with ESMTP id 9837597B4F; Tue, 16 Mar 2004 23:54:23 +0100 (CET) Date: Tue, 16 Mar 2004 23:52:20 +0100 Reply-To: Marcus Boerger X-Priority: 3 (Normal) Message-ID: <77808030375.20040316235220@marcus-boerger.de> To: Andi Gutmans , Timm Friebe Cc: internals@lists.php.net In-Reply-To: <162807636437.20040316234546@marcus-boerger.de> References: <1079472144.266.12.camel@localhost> <162807636437.20040316234546@marcus-boerger.de> 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, well i forgot to mentione a problem description: Some internal classes copy the standard handler table. And hence their cast handler is set to NULL. This we need to avoid. But still standard objects may not be converted to strings everywhere. > 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 -- Best regards, Marcus mailto:helly@php.net