2016-05-04 4 views
16

をPHP戻り値の型がどちらか一方を返すと宣言し、他の何かを失敗させますか?複数の戻り値の型は、私は2つの戻り値の型</strong>の<strong>1を返すことができ、いくつかのメソッドを持っている7

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

    return SucceedObject; 
} 
+3

をサポートしています'FailObject'と' SucceedObject'の両方がインタフェースを共有している場合、または共通の親から継承している場合 –

答えて

35

現時点では、2つのオブジェクトがインターフェイスを共有する方法がサポートされています。例:

この例では、ReturnInterfaceは空です。単なるプレゼンスであり、必要な戻り値の型宣言をサポートしています。

警告
以下の議論RFC(ユニオンタイプ)は、いくつかの競合RFCと労働組合の種類について活発な、熱い議論があり
https://wiki.php.net/rfc/union_types

を辞退されました。これらのパスのいずれかの場合には、提案された署名は次のようになります

function test(): FailObject|SuccessObject {} 

前記つまり、私は関係なく、組合型のインターフェースアプローチを好みます。私にとっては、より明確で拡張性があります。後でWarnObjectが必要な場合は、すべてのシグニチャを通過してFailObject|SuccessObject|WarnObjectに更新するのではなく、ReturnInterfaceの拡張として定義する必要があります。

+0

ユニオンタイプのあなたの言及のためにupvoteを使う価値があります。RFC –

+2

また、ここでは抽象クラスです。 – Andrea

+6

これは実際には制限されています:entites(Doctrineなどで使用される)を考える: 'null | Entity'への戻りをヒントできません。本当に制限する... – Aerendir

9

ビショップに記載されているように、複数の戻り値の型を追加するためのRFCがあります。あなたはint型の前に

function exampleFunction(string $input) : ?int 
{ 
    // Do something 
} 

だから、この関数は、文字列にかかるだろうと疑問符を追加することによって:しかし、私はPHP7.1のようあなたは今、このようなNULL可能戻り値の型を指定することができることを追加しようと思いましたnullまたは整数のいずれかを返すことができます。ここで

は、ドキュメントへのリンクです: http://php.net/manual/en/functions.returning-values.php

そしてここでは、使用方法を説明し、そのページからの引用です: PHP 7.1で型宣言を先行することによって、ボイドとヌル戻り値の型が可能になりますか? - (?例えば、関数canReturnNullorString():文字列)

また、ここではこれに関連し、別のスレッドがあります:Nullable return types in PHP7

関連する問題