変数がヌル値でない場合、ブロックif
にしか入っていないifステートメント内の変数をdelcareするにはどうすればよいですか?PHP - ifステートメント内の代入範囲
if(($var = funky()) != null) {}
は私がif
ブロック外$var
を参照することができます。
また、のようなコードで$var
の範囲は何ですか?
変数がヌル値でない場合、ブロックif
にしか入っていないifステートメント内の変数をdelcareするにはどうすればよいですか?PHP - ifステートメント内の代入範囲
if(($var = funky()) != null) {}
は私がif
ブロック外$var
を参照することができます。
また、のようなコードで$var
の範囲は何ですか?
PHPの代入式は、割り当てられた値を返します。 〜he documentation:
割り当て式の値は割り当てられた値です。どんな
funky()
リターンがnull
に緩く等しい何かに評価された場合if
ブロックが実行されないように
だから、$var = funky()
は、falseに評価されます。
if
条件で代入を行っても、割り当てられた変数のスコープには影響しません。 $var
は、代入文の後に現在のスコープ(とのifブロックの外側)で使用できます。
例えば:ここで
function funky() {
return false;
}
if(($var = funky()) != null) {
echo 'something';
}
var_dump($var);
、あなただけの変数がif
ブロックにあるの内側にのみ利用可能であることを確実にするためにboolean false
私は考えることができる唯一の方法が表示されますそこに割り当てて、ブロックの最後の前に設定を解除します。
if (funky() != null) { // evaluate funky() without assigning
$var = funky(); // call funky() again to assign
// do stuff
unset($var);
}
しかし、私は本当にこれを行うには正当な理由がないと思います。
うわー。私は '$ var'が利用可能であることに驚いています* ifブロックの外側にある –
@KolobCanyonなぜですか?スコープを変更していない(if文はクロージャではありません)。あなたは基本的に変数を割り当てただけで、if文を書いていますが、同じ行にすべて同じことをしたこと以外は – billyonecan
@billyonecan Gotchaです。それを知らなかった。私はいつも変数を代入して次の行でif文を実行しようとしていましたが、それが並んでいるいくつかのコードを見ました...この質問に私を導きます –
'if($ var = funky())' - 私はそれを擬似コードとしますか?そうでない場合は、あなたがやっていることをしていない限り、 '=='を比較するのではなく、 '='を割り当てます。 –
* "ifブロック内のコードはまだ実行されるのですか?条件付きも必要ですか?" * - はい。割り当てのため、常にTRUEとみなされるためです。あなたの編集:* "if(!empty($ var = funky()))" * - それが空でない場合のみ。 –
@ Fred-ii-私はあなたを持っていると思うので、この場合は変数の割り当てが常に**真となります。条件を追加しない限り、基本的に無意味になります。 –