Hello Andi,
the problem is that we have many classes that the handler table to behave mostly like a default php object. We'd need to manually set the cast handler for all of them.
Yes, that is correct. Don't forget that cast_object() can not call user-defined __toString().
If you have a better way then let me know but I don't want to do some hack just because other objects are copying the stdclass'es handlers (which they shouldn't really do in the first place or at least, I don't have a contract with internal classes about it).
Andi
marcus
Wednesday, March 17, 2004, 9:45:26 AM, you wrote:
> The Exception class should support cast_object(). I don't see why we need > to add extra flags.
> Andi
> At 11:45 PM 3/16/2004 +0100, Marcus Boerger wrote: >>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 >>
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php
-- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php