LoginSignup
0
0

More than 3 years have passed since last update.

読解メモ: PHP RFC: Make constructors and destructors return void

Posted at

この記事は @carrotRakkoPHP RFC: Make constructors and destructors return void を読み解いて自分なりにまとめなおしたものです。

英語の解釈や PHP の仕様/実装などなどについて間違っている部分を見つけたらご指摘くださると幸いです。

この記事を書いている時点で読んでいるリビジョンは 2020/07/02 23:13 のもの です。

__construct() の返り値の型指定

型指定の仕方を3パターン考えてみます↓

  1. 型指定なし: __construct()
  2. 型指定あり & void: __construct(): void
  3. 型指定あり & 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つ考えてみます↓

  1. なにも指定していないとみなされる(そのまま): 文法違反ですが強いて言うなら __construct(): void|mixed
  2. 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パターン考えてみます↓

  1. 怒られない
  2. Deprecated
  3. Fatal error

PHP 7.4.x では(事実)

怒られない

PHP 8.0 では(提案)

Deprecated

PHP 8.1/9.0 では(提案)

Fatal error

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0