1. ホーム
  2. php

PHP 7 で複数の戻り値の型を指定することは可能ですか?

2023-08-07 09:10:44

質問

を返すことができるいくつかのメソッドを持っています。 のどちらかを返すことができます。 . 私はMCVを利用したフレームワークを使用しているので、特にこれらのいくつかの関数をリファクタリングすることは魅力的ではありません。

どちらか一方を返す戻り型を宣言し、それ以外では失敗することは可能でしょうか?

function test(): ?
{
    if ($this->condition === false) {
        return FailObject;
    }

    return SucceedObject;
}

どのように解決するのですか?

PHP 8+の時点では 組合型 :

function test(): FailObject|SuccessObject {}

もうひとつの方法は、PHP 4 以降のすべてのバージョンで利用可能なもので、 2 つのオブジェクトがひとつのインターフェイスを共有することです。例を挙げます。

interface ReturnInterface {}
class FailObject implements ReturnInterface {}
class SuccessObject implements ReturnInterface {}
function test(): ReturnInterface {}

この例では ReturnInterface は空です。その存在だけで、必要な戻り値の型宣言をサポートしています。

ベースとなる、おそらく抽象的な、クラスを使うこともできます。


私にとっては、この使用例では、インターフェースはユニオン型よりも明確で、より拡張性があります。例えば、もし私が後で WarnObject を拡張するように定義するだけでよいのです。 ReturnInterface -- に更新するのではなく、すべてのシグネチャを FailObject|SuccessObject|WarnObject .