web-dev-qa-db-ja.com

PHP 7でのnull許容の戻り値の型

PHP 7では 戻り型の宣言 が導入されました。これは、戻り値が特定のクラス、インタフェース、配列、呼び出し可能オブジェクト、または関数パラメータで可能な新たにヒントを与えることができるスカラ型のいずれかであることを示すことができることを意味します。

function returnHello(): string {
    return 'hello';
}

多くの場合、値が常に存在するとは限らず、何らかのタイプの値またはnullが返される可能性があります。デフォルトをnull(DateTime $time = null)に設定することでパラメータをnullにすることはできますが、戻り値の型に対してこれを行う方法はないようです。それは確かにそうなのでしょうか、それともどうやってそれを実行するのかわからないのですか。これらは機能しません。

function returnHello(): string? {
    return 'hello';
}

function returnHello(): string|null {
    return 'hello';
}
133
Jeroen De Dauw

PHP 7.1は nullable return types をサポートするようになりました。私がリンクした最初のRFCは、彼らが行ったものです:

function nullOrString(int $foo) : ?string
{
    return $foo%2 ? "odd" : null;
}

古い答え:

私のコメントは実際には質問に対する答えだったので:

PHP 7は、null許容の戻り値型をまだサポートしていませんが、 RFC があり、それを解決するために、PHP 7.1に到達することを目指しています。合格した場合、構文はすべての型ヒント(戻り型と型ヒントの両方)に影響します。

public function returnStringOrNull(?array $optionalArray) : ?string
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

競合するRFC もあり、ユニオンタイプを追加します。これは同じことを行うことができますが、異なるように見えます:

public function returnStringOrNull(array|null $optionalArray) : string|null
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);//string returned here
    }
    return null;
}

ただし、今のところ、次のように記述する必要があります。

public function returnStringOrNull( array $optionalArray = null)
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);
    }
}

または、戻り値の型と一致するように空の文字列を返し、偽の値を確認します。

public function returnStringOrNull( array $optionalArray = null) : string
{
    if ($optionalArray) {
        return implode(', ', $optionalArray);
    }
    return '';
}
//call
$string = $x->returnStringOrNull();
if (!$string) {
    $string = $x->returnStringOrNull(range(1, 10));
}
228

Nullable Types はPHP 7.1で利用可能です。

これは構文例です:

public function getName(): ?string
{
    return $this->name; // name can be null
}

PHP 7.1は現在GAであり、あなたはPHP 7.0からアップグレードすることができます(後方互換性のないものはほとんどない 変更 あなたがチェックしなければならない)

57
the_nuts