0 レビュー
1 回答
PHP:(isset($ a)&&!empty($ a))と$ a??falseの間に違いはありますか
<脇>
答えへのリンク
この質問にはすでに回答があります:
わからない
0
レビュー
答え :
解決策:
まず、d ifのさまざまな要素が何をしているのかを理解しましょう:
isset
は変数や配列要素などを受け取り、 true ifを返します存在し、null以外の値empty
は変数や配列要素などを受け取り、 false ifを返します存在します 、およびには、true
と同等と見なされる値があります。
??
は、変数や配列要素などを調べ、その値ifを存在するを返します。 >、およびnull以外の値;それ以外の場合は、右側の引数 を返します。
if
ステートメントで使用される式は、自動的にブール値にキャストされますつまり、同等性を確認できます:
empty
は、isset()
とfalseへのキャストの組み合わせです。具体的にはif、empty($ a)===!isset($ a)|| !(bool)$ a
なので、!empty($ a)=== isset($ a)&&(bool)$ a
< / li>??
は、isset
と同じチェックを使用しますが、empty<と同じチェックを使用しません。 / code>;したがって、
$ a ?? false
自体はisset($ a)と同等ですか? $ a:false
- しかし、
if
ステートメントでは、すべてがブール値に強制されるため、if($ a ?? false)...
はif((bool)(isset($ a)?$ a:false))と同等です...
またはもっと読みやすいif(isset($ a)?(bool)$ a:false)...
これが答えにつながります。つまり、次のすべてが同じことをします。
if(isset($ a)&&!empty($ a))..。 if(isset($ a)&&!(bool)$ a)... // empty()は単なるブールキャスト+ isset if(!empty($ a))...//issetは実際には冗長です if(isset($ a)?(bool)$ a:false)...//&&バージョンと同じロジック if((bool)($ a ?? false))...//??はissetを実行します if($ a ?? false)... // ifは(bool)を実行します
おそらく最も読みやすいのは、
!empty($ a)
を単独で使用し、??
をそのままにしておくことです。true
ではなく元の値が実際に必要です。- しかし、
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。