On Fri, Aug 3, 2012 at 11:05 PM, Andrew Faulds <a...@ajf.me> wrote:

>  On 03/08/12 21:55, Ferenc Kovacs wrote:
>
> Andrew:
> From your mails, it seems that you don't agree with Stan on turning
> everything but fatals into exceptions[9].
> I'm really confused about that, as if we take away warnings (and by that
> logic everything else which is less serious than a warning) the we would
> only have the fatal errors (which we already discussed to not turn into
> exceptions and you also seemed to agree[10]), E_USER
> and E_RECOVERABLE_ERROR.
> Is this what you propose?
>
> Warnings aren't "errors" as such (IMO they are little more than glorified
> debugging print statements). Making them into exceptions would mean you'd
> have to catch them, whilst at the moment they are loud but harmless.
>

errors and warnings/notices/etc. share the same infrastructure(called error
handling. :P) so it is a little bit easy to get confused when someone talks
about error handling in generals by errors, or only just a subset of the
error levels.


> However, I think more serious errors should be exceptions. But perhaps in
> PHP 6, because obviously this would break a lot of things.
>

okay, then it is clear.


>
>
>  My opinion (and this is what I tried to explain to you) is that it is
> pretty common in the core and the bundled extensions to raise notices and
> warnings left and right, and still do something,
>
> By that I thought you meant errors of the kind E_STRICT, not warnings.
> Misunderstanding.
>

I was referring to notices/warnings, sorry for the confusion.
But it seems from your reply that you take E_STRICT messages as errors?
Why? Those can only happen on successful operations, and until 5.4, they
weren't part of E_ALL, so they are the less known and less serious of all
of the error levels.


>
>  If we would turn anything less serious than E_RECOVERABLE_ERROR (so any
> notice, deprecation notice, strict notice or warning)into an exception,
> that would be a huuuuuuge BC break.
>
> Of course. I think they are something the current errors system should
> remain for. It should be for that kind of thing, but proper "errors" (you
> know, things going wrong, not warnings etc.) should be exceptions, I think.
>

Yeah, errors are meant to be explicit, hard to not notice/handle and for
that description, Exceptions works just fine.


>
>  Basically silecing errors through setting error_reporting level, custom
> error handlers or the @ operator would stop working, and one should put
> everything into a try-catch block to not have his code blown into his code
> constantly.
>
>  Another thing that I mentioned: even if you catch everything, there
> would be some things that you couldn't do anymore.
> Any method which throws notices or strict/deprecated notices or warnings
> would be broken, as the execution would be halted (as the execution jumps
> into the catch) which would be a major PITA to the userland developers, and
> without further work, it could make the userland/engine in a more fragile
> state, as the original call was interrupted but the execution still
> continues from a different spot.
> With the current error handling the execution either resumes after the
> error handler is called, or the execution is terminates gracefully
>
>  The current error handling provides a way to trigger multiple
> errors/warnings for an operation, and allows to still return and continue
> the execution.
> Turning everything into exceptions would kill both of those, and without
> providing something similar suite, we can't do that imo.
>
>  So basically these are our boundaries:
>
>    - Fatal errors can't be turned into Exceptions, but it was mentioned
>    multiple times, that there are some fatals, which could be turned into
>    E_RECOVERABLE_ERROR.
>
>  Truly fatal errors can't become exceptions. But some fatal errors
> shouldn't be fatal and are recoverable (and I think these should become
> exceptions).
>

yeah, this is in line with what I said.

... skip the links ...

To sum up my thoughts:
> - "real" (i.e., things going wrong, code doing something bad) errors
> should become exceptions, with the possible exception of fatal errors that
> it is impossible to recover from
>

I think that is the further where can we go without breaking every code out
there.


> - notices, warnings, deprecations, etc. should stay as PHP errors, so you
> can just suppress them if you want, and they don't require you to handle
> them
>

I'm thinking about some kind of new infrastructure which would allow the
developer to handle/fetch the errors locally (similar to how you can fetch
the last error with error_get_last(), but with the ability to fetch
multiple items and only those which were generated for a given piece of
code.
of course we could still keep the set_error_handler() as I see two
different use case for handling warnings:

   1. you want to log all errors in some other format what the log_errors
   and error_log ini directives provide
   2. you want to get the errors/warnings in the same scope where the error
   occured and you want to handle that error in that context

for 1, the current set_error_handler is perfect (maybe some improvements
would be welcome, like having multiple handlers at the same time as we
allow it for spl_autoload_register, etc.), for 2, it would be nice having a
better infrastructure, currently it isn't as easy to fetch the warnings for
a specific operation as it could be.


> So fatal errors and notices/warnings/deprecations stay errors, everything
> else becomes an exception.
>
> Clear?
>

yep.

ps: in the meantime we discussed with you on IRC, and it seems that after
that, you would also put E_STRICT to the warnings group.

-- 
Ferenc Kovács
@Tyr43l - http://tyrael.hu

Reply via email to