php - ?int $ numberとint $ number=nullの違いは何ですか?




(2)

ここで説明する2つの言語機能、つまり 型宣言 デフォルトの引数値 を区別することが重要 です

最初の関数は型宣言のみを使用してい NULL 。つまり、入力引数 int 型または NULL 型で なけれ ばなりません。

2番目の関数は、型宣言とデフォルトの引数値の両方を使用しています。これは、引数 int 型または NULL 型でなければならないことを意味し NULL 、省略した場合はデフォルトで NULL

最初の関数を使用します。何も渡さずに単に test() を呼び出した場合、次のようになります。

PHP致命的エラー:不明なArgumentCountError:関数test()への引数が少なすぎる[...]

関数は int または NULL いずれかを期待し NULL が、どちらも取得しませんでしたが、2番目の場合、引数をデフォルト値で定義したため、エラーなしで実行されます。

コード

function test(?int $var) {
  var_dump($var);
}

function test2(int $var = null) {
  var_dump($var);
}

test(1); // fine
test(); // error
test2(1); // fine
test2(); // fine

パフォーマンスに関する限り、違いはおそらく無視できる程度であり、懸念の原因となるほど重要なものはありません。

ライブの例

Repl

この説明を考えると

Nullable型:パラメーターと戻り値の型宣言は、型名の前に疑問符を付けることでnull可能としてマークできるようになりました。 これは、指定されたタイプだけでなく、NULLを引数として渡すことも、値として返すこともできることを意味します。

https://www.php.net/manual/en/migration71.new-features.php

次のコード:


public function test(?int $var) {

}

test()int または null として $var で呼び出すことができることを意味し null

そして、次のコード:


public function test(int $var = null) {

}

test()int または null として $var で呼び出すことができることを意味します。

これら2つの方法の違いは何ですか? これらのいずれかが他よりもパフォーマンスが高いですか?


言語が今日設計されている場合、 int $var = null はおそらくエラーであり、実際には ?int $var = null と書く必要があり ?int $var = null 。 2つの部分の意味は異なります。

  • ? null がそのパラメーターの有効な値であることを示します。
  • = null は、パラメーターが渡されない場合、 null がデフォルトであることを示し null

ただし、 ?type 構文が導入される前は、言語に特別なケースがありました。パラメーターの既定値として null が指定されている場合、型宣言がそれを妨げる場合でも、そのパラメーターに null を渡すことは正当です。





php