この記事は @carrotRakkoが PHP RFC: Make constructors and destructors return voidを読み解いて自分なりにまとめなおしたものです。
英語の解釈や PHP の仕様/実装などなどについて間違っている部分を見つけたらご指摘くださると幸いです。
この記事を書いている時点で読んでいるリビジョンは 2020/07/02 23:13 のものです。
__construct()の返り値の型指定
型指定の仕方を3パターン考えてみます↓
- 型指定なし:
__construct() - 型指定あり &
void:__construct(): void - 型指定あり &
void以外:__construct(): bool
PHP 7.4.x では(事実)
| 型指定の仕方 | どうなる |
|---|---|
型指定なし: __construct() | 問題なし |
型指定あり & void: __construct(): void | Fatal error |
型指定あり & void以外: __construct(): bool | Fatal error |
PHP 8.0 では(提案)
| 型指定の仕方 | どうなる |
|---|---|
型指定なし: __construct() | 問題なし |
型指定あり & void: __construct(): void | 問題なし |
型指定あり & void以外: __construct(): bool | Fatal error |
PHP 8.1/9.0 では(提案)
PHP 8.0 では(提案)と同じです。
| 型指定の仕方 | どうなる |
|---|---|
型指定なし: __construct() | 問題なし |
型指定あり & void: __construct(): void | 問題なし |
型指定あり & void以外: __construct(): bool | Fatal error |
__construct()に返り値の型指定をしなかった場合
暗黙的に返り値の型指定とみなされるパターンを2つ考えてみます↓
- なにも指定していないとみなされる(そのまま): 文法違反ですが強いて言うなら
__construct(): void|mixed voidを指定したとみなされる:__construct(): voidとみなされる
PHP 7.4.x では(事実)
なにも指定していないとみなされる(そのまま): 文法違反ですが強いて言うなら __construct(): void|mixed
PHP 8.0 では(提案)
なにも指定していないとみなされる(そのまま): 文法違反ですが強いて言うなら __construct(): void|mixed
PHP 8.1/9.0 では(提案)
voidを指定したとみなされる: __construct(): voidとみなされる
__construct()から値を返した場合
PHP の怒り方を3パターン考えてみます↓
- 怒られない
DeprecatedFatal error
PHP 7.4.x では(事実)
怒られない
PHP 8.0 では(提案)
Deprecated
PHP 8.1/9.0 では(提案)
Fatal error