> 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:[EMAIL PROTECTED]

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to