Hi Nikita,

> -----Original Message-----
> From: Nikita Popov [mailto:nikita....@gmail.com]
> Sent: Thursday, June 25, 2015 2:53 PM
> To: PHP internals; Dmitry Stogov
> Subject: [PHP-DEV] Allow exceptions in __toString()
> 
> Hi internals!
> 
> Currently it's not possible to throw an exception from __toString() - instead 
> you
> will get a (real) fatal error. This is becoming more and more problematic as 
> time
> goes on, e.g. with PHP 7 an exception can be triggered as a result of a VM 
> error
> or even a parse error.
> 
> I'd like to lift this restriction. A patch can be found here:
> https://github.com/php/php-src/pull/1364
> 
> Apart from allowing exceptions, the patch also converts two leftover
> recoverable fatal errors relating to __toString() into Error exceptions.
> 
> Furthermore the patch makes sure that we correctly (i.e. without leaks and
> without superfluous notices or other side-effects) handle __toString() 
> exceptions
> in the engine. This includes concatenation and interpolation, but also things 
> like
> writing $foo->$object or ${$object}.
> zend_parse_parameters() and Fast ZPP also deal with exceptions correctly.
> 
> However what it doesn't do, and what I wouldn't consider feasible to do, is
> ensure that every single string conversion in library functions is exception 
> safe.
> Personally I don't think this is a blocking issue, as the worst that can 
> happen is
> usually an additional superfluous warning to be thrown, or something similar. 
> If
> cases like this turn up, we can specifically target them.
> 
> It should also be noted that whatever issues with exceptions-safety may 
> remain,
> they already exist now (plus those the patch fixes), because the two
> aforementioned recoverable fatal errors can be converted to exceptions (and
> anyone doing blanket ErrorException conversions will do this).
> 
> So basically the question here is, is this partial solution acceptable for us?
> 
Given the expressed concerns, despite the change itself is a good thing when 
working properly, IMHO we shouldn't urge it into 7.0. If having it now can lead 
to subtle improper behavior and even worse bugs, preferable were to have a 
complete patch in 7.1.

Regards

Anatol


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

Reply via email to