2017-01-20 7 views
1

これは「なぜ機能するのですか」と「なぜそれを使用するのか、なぜそれを使用しないのか」という質問だけです。PHP「Ternary Like」ブール式の好奇心

私たちは皆、あまりにも三項演算

$var = (isset($i) ? true:false); 

しかし、次の作品のようなPHP何かでを使用してPHP式を知っています。 (これは、3部の三ないが、それは2parts、バイナリ操作の以上である。)が実用的ではないかもしれない

$var = true; 
isset($i) || $var = false; 

:)が、より有用な構造そこで

isset($i) || exit(); 

あります(より良い芋見て)上記

共通

より
if(!isset($i)) exit(); 

しかし、他のと同じ結果を持っているでしょう10

私はめったにPHPで使用されるこのタイプの構造を見ません。なぜこれは機能しますか?それはなんと呼ばれていますか。なぜそれは教えられないのか、それ以上使われないのですか?それを使用することに悪い点はありますか?同じ方法で&&を実際に使用する方法はありますか?

+0

FYI、 '$ var =(isset($ i)?true:false);'は '$ var = isset($ i);のちょうど畳み込まれた同義語です; –

+1

これは「論理的」または「論理的」と呼ばれます。それは怠け者です - 意味:最初の部分が真であれば、結果は常に* trueになるので、2番目の部分を評価する必要はありません。第2部分は、第1部分が真である場合にのみ評価される。詳細については、** [マニュアル](https://secure.php.net/manual/en/language.operators.logical.php)** –

+0

@ Alvaroをご覧ください。それは三元構成の単なる例であった。 – skribe

答えて

1

この文の記述方法は、C、Perlなどの言語でも存在し、論理演算子で連鎖された文をコンパイラがどのように評価するかに関係しています。

if (a() or b())があるとしたら、a()がtrueを返すと、文全体がすでに真であるため、b()を評価する必要はありません。したがって、は、a()がfalseの場合にのみ呼び出されます。あなたはifなしでこれを書くことができます、それは同じように動作します。

この省略形は通常、既定値を定義する、または条件が満たされない場合に終了する、説明されているように見付かります。

関連する問題