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. However, I think more serious errors should be exceptions. But perhaps in PHP 6, because obviously this would break a lot of things.

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.
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.
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).

  * Most/all non-fatal errors could be safe to be turned into
    Exceptions as without explicit measures(try-catch) on the caller's
    side, it would still stop the execution.
  * Every other warning/notice/etc. which are just holds additional
    information but not indicating unsuccessful execution in itself
    cannot be turned into Exceptions.

I have a few ideas about how to proceed from here, but I need some time to gather my thoughts.

 1. http://www.mail-archive.com/internals@lists.php.net/msg60043.html
 2. http://www.mail-archive.com/internals@lists.php.net/msg60054.html
 3. http://www.mail-archive.com/internals@lists.php.net/msg60056.html
 4. https://wiki.php.net/rfc/errors_as_exceptions
 5. https://wiki.php.net/rfc/enhanced_error_handling
 6. http://www.mail-archive.com/internals@lists.php.net/msg60060.html
 7. http://www.mail-archive.com/internals@lists.php.net/msg60063.html
 8. http://www.php.net/manual/en/errorfunc.constants.php
 9. http://www.mail-archive.com/internals@lists.php.net/msg60061.html
10. http://www.mail-archive.com/internals@lists.php.net/msg60065.html

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 - 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

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

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


--
Andrew Faulds
http://ajf.me/

Reply via email to