php - ?int $ numberとint $ number=nullの違いは何ですか?
(2)
この説明を考えると
Nullable型:パラメーターと戻り値の型宣言は、型名の前に疑問符を付けることでnull可能としてマークできるようになりました。 これは、指定されたタイプだけでなく、NULLを引数として渡すことも、値として返すこともできることを意味します。
次のコード:
public function test(?int $var) {
}
test()
を
int
または
null
として
$var
で呼び出すことができることを意味し
null
。
そして、次のコード:
public function test(int $var = null) {
}
test()
を
int
または
null
として
$var
で呼び出すことができることを意味します。
これら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
パフォーマンスに関する限り、違いはおそらく無視できる程度であり、懸念の原因となるほど重要なものはありません。
ライブの例
言語が今日設計されている場合、
int $var = null
はおそらくエラーであり、実際には
?int $var = null
と書く必要があり
?int $var = null
。
2つの部分の意味は異なります。
-
?
null
がそのパラメーターの有効な値であることを示します。 -
= null
は、パラメーターが渡されない場合、null
がデフォルトであることを示しnull
。
ただし、
?type
構文が導入される前は、言語に特別なケースがありました。パラメーターの既定値として
null
が指定されている場合、型宣言がそれを妨げる場合でも、そのパラメーターに
null
を渡すことは正当です。