rfc:throw_expression
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:throw_expression [2020/03/22 15:59] – Add more examples and make them more readable ilijatovilo | rfc:throw_expression [2020/04/23 15:30] (current) – Move to implemented ilijatovilo | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: throw expression ====== | ====== PHP RFC: throw expression ====== | ||
- | * Version: 0.9 | ||
* Date: 2020-03-21 | * Date: 2020-03-21 | ||
- | * Author: Ilija Tovilo, | + | * Author: Ilija Tovilo, tovilo.ilija@gmail.com |
* Target Version: PHP 8.0 | * Target Version: PHP 8.0 | ||
- | * Status: | + | * Status: |
* Implementation: | * Implementation: | ||
Line 14: | Line 13: | ||
<code php> | <code php> | ||
- | $callable = fn() => throw new Exception(); | ||
// This was previously not possible since arrow functions only accept a single expression while throw was a statement. | // This was previously not possible since arrow functions only accept a single expression while throw was a statement. | ||
+ | $callable = fn() => throw new Exception(); | ||
+ | // $value is non-nullable. | ||
$value = $nullableValue ?? throw new InvalidArgumentException(); | $value = $nullableValue ?? throw new InvalidArgumentException(); | ||
- | // $value can now be considered non-nullable. | ||
+ | // $value is truthy. | ||
$value = $falsableValue ?: throw new InvalidArgumentException(); | $value = $falsableValue ?: throw new InvalidArgumentException(); | ||
- | // $value can now be considered truthy. | ||
+ | // $value is only set if the array is not empty. | ||
$value = !empty($array) | $value = !empty($array) | ||
? reset($array) | ? reset($array) | ||
: throw new InvalidArgumentException(); | : throw new InvalidArgumentException(); | ||
- | // $value is only set if the array is not empty. | ||
</ | </ | ||
Line 32: | Line 31: | ||
<code php> | <code php> | ||
+ | // An if statement could make the intention clearer | ||
$condition && throw new Exception(); | $condition && throw new Exception(); | ||
$condition || throw new Exception(); | $condition || throw new Exception(); | ||
$condition and throw new Exception(); | $condition and throw new Exception(); | ||
$condition or throw new Exception(); | $condition or throw new Exception(); | ||
- | // An if statement could make the intention clearer | ||
</ | </ | ||
Line 88: | Line 87: | ||
The common theme here is that everything after the '' | The common theme here is that everything after the '' | ||
- | One exception to this rule is using '' | + | The only downside of the low precedence |
<code php> | <code php> | ||
Line 113: | Line 112: | ||
Proposed version is PHP 8. | Proposed version is PHP 8. | ||
- | ===== RFC Impact | + | ===== Voting |
- | ==== To SAPIs ==== | + | Voting starts 2020-04-05 and ends 2020-04-19. |
- | None. | + | |
- | ==== To Existing Extensions ==== | + | As this is a language change, a 2/3 majority is required. The vote is a straight Yes/No vote for accepting the RFC and merging the patch. |
- | None. | + | |
- | ==== To Opcache ==== | + | <doodle title="Would you like to convert the throw statement into an expression?" |
- | None. | + | * Yes |
- | + | * No | |
- | ===== Proposed Voting Choices ===== | + | </doodle> |
- | As this is a language change, a 2/3 majority is required. The vote is a straight Yes/No vote for accepting the RFC and merging the patch. | + | |
===== References ===== | ===== References ===== |
rfc/throw_expression.1584892789.txt.gz · Last modified: 2020/03/22 15:59 by ilijatovilo