この記事は @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パターン考えてみます↓
- 怒られない
Deprecated
Fatal error
PHP 7.4.x では(事実)
怒られない
PHP 8.0 では(提案)
Deprecated
PHP 8.1/9.0 では(提案)
Fatal error