rfc:engine_exceptions
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:engine_exceptions [2013/10/24 16:37] – a few small improvements nikic | rfc:engine_exceptions [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 2: | Line 2: | ||
* Date: 2013-10-23 | * Date: 2013-10-23 | ||
* Author: Nikita Popov < | * Author: Nikita Popov < | ||
- | * Status: | + | * Status: |
* Proposed for: PHP 5.6 | * Proposed for: PHP 5.6 | ||
* Patch: https:// | * Patch: https:// | ||
+ | * ML discussion: http:// | ||
===== Introduction ===== | ===== Introduction ===== | ||
Line 10: | Line 11: | ||
This RFC proposes to allow the use of exceptions in the engine and to allow the replacement of existing fatal or recoverable fatal errors with exceptions. | This RFC proposes to allow the use of exceptions in the engine and to allow the replacement of existing fatal or recoverable fatal errors with exceptions. | ||
- | As an example of this change, consider | + | As an example of this change, consider the following code-snippet: |
<code php> | <code php> | ||
Line 123: | Line 124: | ||
<code php> | <code php> | ||
- | $lock->aquire(); | + | $lock->acquire(); |
try { | try { | ||
doSomething(); | doSomething(); | ||
Line 142: | Line 143: | ||
public function __construct(Lock $lock) { | public function __construct(Lock $lock) { | ||
$this-> | $this-> | ||
- | $this-> | + | $this-> |
} | } | ||
public function __destruct() { | public function __destruct() { | ||
Line 150: | Line 151: | ||
function test($lock) { | function test($lock) { | ||
- | $manager = new LockManager($lock); | + | $manager = new LockManager($lock); |
| | ||
doSomething(); | doSomething(); | ||
Line 255: | Line 256: | ||
Currently it is possible to silently ignore recoverable fatal errors with a custom error handler. By replacing them with exceptions this capability is removed, thus breaking compatibility. | Currently it is possible to silently ignore recoverable fatal errors with a custom error handler. By replacing them with exceptions this capability is removed, thus breaking compatibility. | ||
- | I have never seen this possibility used in practice outside some weird hacks (which use ignored recoverable type constraint errors to implement scalar typehints). In most cases custom error handlers throw an '' | + | I have never seen this possibility used in practice outside some weird hacks (which use ignored recoverable type constraint errors to implement scalar typehints). In most cases custom error handlers throw an '' |
If these concerns are considered significant this RFC might be restricted to '' | If these concerns are considered significant this RFC might be restricted to '' | ||
Line 261: | Line 262: | ||
==== catch-all blocks in existing code ==== | ==== catch-all blocks in existing code ==== | ||
- | As '' | + | As '' |
- | If this is considered to be an issue a solution is to introduce a '' | + | If this is considered to be an issue one possible |
'' | '' | ||
Line 297: | Line 298: | ||
</ | </ | ||
- | Additional improvement (like removing the '' | + | Additional improvement (like removing the '' |
< | < | ||
Line 305: | Line 306: | ||
#1 {main} | #1 {main} | ||
</ | </ | ||
+ | |||
+ | ==== Not all errors converted ==== | ||
+ | |||
+ | The Zend Engine currently (master on 2013-12-10) contains the following number of fatal-y errors: | ||
+ | |||
+ | < | ||
+ | E_ERROR: | ||
+ | E_CORE_ERROR: | ||
+ | E_COMPILE_ERROR: | ||
+ | E_PARSE: | ||
+ | E_RECOVERABLE_ERROR: | ||
+ | </ | ||
+ | |||
+ | The count was obtained using '' | ||
+ | |||
+ | The patch attached to the RFC currently (as of 2013-10-24) removes 70 '' | ||
+ | |||
+ | Some errors are easy to change to exceptions, others are more complicated. Some are impossible, like the memory limit or execution time limit errors. The '' | ||
+ | |||
+ | Converting most existing errors will take some time and in the meantime we'll be in a situation where some part of the errors were converted to exceptions but another part stays fatal. From a user perspective it may not be immediately clear when one is used over the other. | ||
+ | |||
+ | While this may be slightly inconvenient, | ||
+ | |||
+ | ===== Backwards compatibility ===== | ||
+ | |||
+ | The '' | ||
+ | |||
+ | The '' | ||
===== Patch ===== | ===== Patch ===== | ||
Line 310: | Line 339: | ||
A preliminary patch for this RFC is available at https:// | A preliminary patch for this RFC is available at https:// | ||
- | The patch introduces basic infrastructure for this change and removes all '' | + | The patch introduces basic infrastructure for this change and removes all '' |
+ | |||
+ | ===== Vote ===== | ||
+ | |||
+ | This is a yes/no vote with the additional option of implementing the proposal, but without changing '' | ||
+ | |||
+ | As this is a language-related change, the vote requires a two-third majority. The 3-way vote will be interpreted as follows: If 2/3 of the total votes are for " | ||
+ | |||
+ | If you are in favor of this proposal in general, but not for PHP 5.6, use the " | ||
+ | |||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * Yes, without E_RECOVERABLE_ERROR changes | ||
+ | * No | ||
+ | </ | ||
+ | |||
+ | Vote started on 2013-12-07 and ended on 2013-12-14. |
rfc/engine_exceptions.1382632654.txt.gz · Last modified: 2017/09/22 13:28 (external edit)