rfc:noreturn_type
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:noreturn_type [2021/03/10 17:56] – created mattbrown | rfc:noreturn_type [2021/03/30 15:07] – Add simple majority label mattbrown | ||
---|---|---|---|
Line 2: | Line 2: | ||
* Version: 0.1 | * Version: 0.1 | ||
* Date: 2021-03-10 | * Date: 2021-03-10 | ||
- | * Author: Matt Brown < | + | * Author: Matt Brown < |
- | * Status: | + | * Status: |
* Proposed Version: PHP 8.1 | * Proposed Version: PHP 8.1 | ||
* Implementation: | * Implementation: | ||
Line 22: | Line 22: | ||
<code php> | <code php> | ||
- | function redirect(string $uri) : noreturn { | + | function redirect(string $uri): noreturn { |
header(' | header(' | ||
exit(); | exit(); | ||
} | } | ||
- | function redirectToLoginPage() : noreturn { | + | function redirectToLoginPage(): |
redirect('/ | redirect('/ | ||
} | } | ||
Line 47: | Line 47: | ||
<code php> | <code php> | ||
- | function redirect(string $uri) : noreturn { | + | function redirect(string $uri): noreturn { |
if ($uri === '' | if ($uri === '' | ||
return; // Fatal error: A noreturn function must not return | return; // Fatal error: A noreturn function must not return | ||
Line 59: | Line 59: | ||
<code php> | <code php> | ||
- | function redirect(string $uri) : noreturn { | + | function redirect(string $uri): noreturn { |
if ($uri !== '' | if ($uri !== '' | ||
header(' | header(' | ||
Line 72: | Line 72: | ||
<code php> | <code php> | ||
- | function generateList(string $uri) : noreturn { | + | function generateList(string $uri): noreturn { |
yield 1; | yield 1; | ||
exit(); | exit(); | ||
Line 100: | Line 100: | ||
abstract class Person | abstract class Person | ||
{ | { | ||
- | abstract public function hasAgreedToTerms() : bool; | + | abstract public function hasAgreedToTerms(): |
} | } | ||
class Kid extends Person | class Kid extends Person | ||
{ | { | ||
- | public function hasAgreedToTerms() : noreturn | + | public function hasAgreedToTerms(): |
{ | { | ||
throw new \Exception(' | throw new \Exception(' | ||
Line 117: | Line 117: | ||
abstract class Redirector | abstract class Redirector | ||
{ | { | ||
- | abstract public function execute() : noreturn; | + | abstract public function execute(): noreturn; |
} | } | ||
class BadRedirector extends Redirector | class BadRedirector extends Redirector | ||
{ | { | ||
- | public function execute() : void {} // Fatal error | + | public function execute(): void {} // Fatal error |
+ | } | ||
+ | </ | ||
+ | |||
+ | Returning by reference with a '' | ||
+ | |||
+ | <code php> | ||
+ | class A { | ||
+ | public function & | ||
+ | } | ||
+ | class B extends A { | ||
+ | public function & | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Returning '' | ||
+ | |||
+ | <code php> | ||
+ | class A implements Stringable { | ||
+ | public function __toString(): | ||
+ | return " | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class B extends A { | ||
+ | public function __toString(): | ||
+ | throw new \Exception(' | ||
+ | } | ||
} | } | ||
</ | </ | ||
Line 157: | Line 184: | ||
<code php> | <code php> | ||
- | function sayHello(string $name) : void { | + | function sayHello(string $name): void { |
echo "Hello $name"; | echo "Hello $name"; | ||
} | } | ||
Line 168: | Line 195: | ||
<code php> | <code php> | ||
- | function redirect(string $uri) : noreturn { | + | function redirect(string $uri): noreturn { |
header(' | header(' | ||
exit(); | exit(); | ||
Line 185: | Line 212: | ||
<code php> | <code php> | ||
# | # | ||
- | function redirectToLoginPage() : void {...} | + | function redirectToLoginPage(): |
</ | </ | ||
Line 191: | Line 218: | ||
<code php> | <code php> | ||
- | function redirectToLoginPage() : noreturn {...} | + | function redirectToLoginPage(): |
</ | </ | ||
Line 222: | Line 249: | ||
Draft implementation here: https:// | Draft implementation here: https:// | ||
- | ===== Proposed Voting Choices | + | ===== Vote ===== |
+ | |||
+ | Voting opens 2021-03-30 and 2021-04-13 at 11:00:00 AM EDT. 2/3 required to accept. | ||
+ | |||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
+ | |||
+ | Following vote requires simple majority: | ||
- | Yes/no vote for adding '' | + | <doodle title=" |
+ | * noreturn | ||
+ | * never | ||
+ | </ |
rfc/noreturn_type.txt · Last modified: 2021/04/19 09:31 by nikic