PHP 7。
PHP 7:の戻り値の型をテストする簡単なスクリプトを作成しました。
<?php
Class Obj {
public function __construct(){
}
public function test(): string { //a string needs to be returned
return "ok";
}
}
function foo(): Obj { //instance of Obj needs to be returned
return new Obj();
}
$o = foo();
echo $o->test(); // output: ok
他のプログラミング言語では、戻り型void
を指定すると、何も返せないか、エラーが発生します。そこで、このスクリプトを書きました。
<?php
function foo(): void {
}
foo();
さて、上記のスクリプトでは、期待される出力は何もありません。代わりに、致命的なエラーが表示されます。
致命的エラー:foo()の戻り値はvoidのインスタンスである必要があり、2行目では何も返されません
私の質問は(見つけることができませんでした)、PHP 7で同様のvoid
タイプがありますか?
void return type の新しい別個のRFCが公開され、投票に合格し、PHP 7.1。
PHPにはvoid
戻り型があります。 :)
wiki.php.net から取得:
今後の仕事
このRFCの範囲外の将来の作業のアイデアには、次のものがあります。
- 関数が何も返さないことを宣言できるようにします(void in Java and C)
そのため、現在、何も返さないと宣言する方法はありません。
あなたの状況で何が最善かはわかりませんが、おそらく今のところは戻り値の型を宣言しないでください。
PHP 7にvoid
戻り値の型があるかどうかあなたの質問に答えるには:
まだguaranteeはありませんが、void
または類義語が何らかの方法で実装される可能性が非常に高いと思います。
ここで戻り値型のRFCの著者。 PHP 7.0では、void
戻り値の型はありません。なぜなら、 RFC は追加せず、他のRFCターゲティングもPHP 7.0。
タイプvoid
は、PHP 7シリーズに存在する可能性があります。新しいキー/予約語を追加しても、コードが破損する場合でもマイナーリリースで問題ありません。 、しかし、それはPHP 5.4でcallable
キーワードとともに行われました。
個人的には、void
;は必要ないと思います。既にnull
があります。 マニュアルから :
特別なNULL値は、値のない変数を表します。 NULLは、null型の唯一の可能な値です。
In PHP何も返さない関数は、暗黙的にnull
を返します。これは、実際にはできないことを意味します何も返さない*。null
ルートに行くことは、 null
が=で始まる有効なクラス/インターフェイス/特性名ではないため、下位互換性の中断がないことを意味します。 PHP 7. そして、新しいキーや予約語を追加しません。
* Zend Engineに精通している人は、何も返せないことを認識しますが、何も返さない場合、割り当てている変数にはnullが割り当てられ、論理的に同等になります。
PHP 7.1ではvoid
疑似タイプがあります。これは Void Return Type RFC で定義されています。
個人的には、RFCの作成者が以前に「終了」し、RFCを取り上げていたため、これについては残念です。次に、それが提案され、議論されていることを私が知っているので、彼女は私が上記のように無効に対応するユニオンタイプを提案するのを待ちません。しかたがない。
void
return型は、PHP 7.1で受け入れられました。ですから、それは将来来るでしょう。
動作の例:
function should_return_nothing(): void {
return 1; // Fatal error: A void function must not return a value
}
function returns_null(): void {
return null; // Fatal error: A void function must not return a value
}
function lacks_return(): void {
// valid
}
function returns_nothing(): void {
return; // valid
}
詳細については、 Andrea FauldsのRFC を参照してください!
PHPにはvoidに相当する型はなく、NULLを返します。 0や他の値のような型を持たないため、要件に適合する場合があります。注:実際の無効は返品しないことを意味します。
@BeNice私はあなたの主張を理解しています、とにかく持続可能性の実用的な質問としてレヴィ・モリソンからの考察を要約します:void
を可能な戻り型の事実として導入すると、null
はnull
です。
この方法では、void
の型チェックのためにnull
が返され、設計によってアーキテクチャの制約が変更され、下位互換性に混乱が生じます。
// your choice implies this comparison should be true:
gettype(null) === void;
自分のコードでnull
を頻繁に使用しなかった人は、void
型の実装に耐えると思います。