On Sun, Jul 5, 2015 at 10:51 PM, Nikita Popov <nikita....@gmail.com> wrote:

> On Sun, Jul 5, 2015 at 10:33 PM, Stanislav Malyshev <smalys...@gmail.com>
> wrote:
>
>> Hi!
>>
>> >>> I can see your concern here -- however this is nothing specific to
>> >>> exceptions thrown from __toString(). There is are a number of ways you
>> >>> can end up in this situation, the two most common being:
>> >>
>> >> I summarize this a bit freely as "We already have places which are hard
>> >> to understand an predict, so let's add more!"
>> >>
>> >
>> > That, or "Let's not be hypocrites".
>>
>> I don't think the position of "let's not add more unpredictable behavior
>> to the engine" is adequately described as "hypocrite". We know there are
>> interruption problems and such in the engine, we know some of them are
>> hard to fix. However, adding a different class of those doesn't make it
>> better in any way. If we find a solution that allows us to not introduce
>> new unpredictable behaviors - I'm all for it, it's great. Maybe the code
>> that allows to throw exceptions the same way we do with errors, maybe
>> some way to not get unpredictable results on conversions. But we can't
>> just ignore it because there are other problems in the engine too.
>
>
> Sorry, I just find it somewhat weird that we consider some of the
> exceptions generated as the result of __toString calls to be okay (error
> handler exceptions), while others are considered to be too dangerous to
> allow (direct exceptions).
>
> But maybe I just approached this from the wrong direction. Instead of
> allowing exceptions in __toString in combination with some hardening of the
> VM, maybe we should just convert the recoverable fatal errors __toString
> currently throws to actual fatal errors? Not a huge fan of doing that, but
> at least it's consistent.
>

I just realized that this wouldn't quite cut it, because our object to
integer and object to float conversions currently throw notices, which can
be converted to exceptions and to-int conversions at least are all over the
place. Presumably it's not acceptable to change these notices to fatal
errors.

Furthermore the array-to-string conversion also throws a notice since 5.4,
which can also result in an exception. While we approved an RFC (not
implemented) to make this a recoverable error, I suspect making this a real
fatal error will not be met with much enthusiasm.

Nikita

Reply via email to