2017-05-03 3 views
1

変数がヌル値でない場合、ブロックifにしか入っていないifステートメント内の変数をdelcareするにはどうすればよいですか?PHP - ifステートメント内の代入範囲

if(($var = funky()) != null) {} 

は私がifブロック外$varを参照することができます。

また、のようなコードで$varの範囲は何ですか?

+1

'if($ var = funky())' - 私はそれを擬似コードとしますか?そうでない場合は、あなたがやっていることをしていない限り、 '=='を比較するのではなく、 '='を割り当てます。 –

+0

* "ifブロック内のコードはまだ実行されるのですか?条件付きも必要ですか?" * - はい。割り当てのため、常にTRUEとみなされるためです。あなたの編集:* "if(!empty($ var = funky()))" * - それが空でない場合のみ。 –

+0

@ Fred-ii-私はあなたを持っていると思うので、この場合は変数の割り当てが常に**真となります。条件を追加しない限り、基本的に無意味になります。 –

答えて

1

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); 
} 

しかし、私は本当にこれを行うには正当な理由がないと思います。

+0

うわー。私は '$ var'が利用可能であることに驚いています* ifブロックの外側にある –

+0

@KolobCanyonなぜですか?スコープを変更していない(if文はクロージャではありません)。あなたは基本的に変数を割り当てただけで、if文を書いていますが、同じ行にすべて同じことをしたこと以外は – billyonecan

+0

@billyonecan Gotchaです。それを知らなかった。私はいつも変数を代入して次の行でif文を実行しようとしていましたが、それが並んでいるいくつかのコードを見ました...この質問に私を導きます –

関連する問題