はPHP

2016-05-09 3 views
0

でISSET()を使用してどのように私はこのコードを試してみた:はPHP

<?php 
    if(isset($a) && ($a ==4)) echo "$a ==4"; 
?> 

をし、$ aが定義されていないので、私は、私がエラーを取得していないことに驚きました。私は1つが、私は同時にisset($a)($a ==4)をチェックすると最初のバージョンがエラーを投げていないのはなぜ

<?php 
    if(isset($a)) 
     if($a == 4) echo "$a == 4"; 
?> 

を書き込む必要があると思いましたか?ショートコードif(isset($a) && ($a ==4))を使用するときに不利な点はありますか?私はそれを信用していませんが、elseブランチが必要なときには本当に便利になります。

+5

と最初の偽で停止します – splash58

+0

これはあなたの質問に[良い答え](http://stackoverflow.com/a/2535578/2233391)です。 – Henders

+3

これは「遅延評価」と呼ばれています....条件は同時にチェックされませんが、左から順に1つずつチェックされます:一連のAND条件のいずれかが偽である場合、PHPは時間を無駄にしません後の基準をチェックします。なぜなら、それが何であっても問題ではないので、最終的な結果は常に偽です –

答えて

7

PHPは、ifの状態を左から右にチェックします。 isset()はを返すので、($a == 4)をチェックしません。ifを打ち切り、スクリプトを続行します。

我々はそれを他の方法で回避を行う場合は、次の

if(($a ==4) && isset($a)) echo "$a ==4"; 

これは未定義の通知を返します。

4

これは、&&オペレータと関係があります。

最初の演算子を最初にチェックします。偽の場合は、条件全体が既に偽であるため、2番目の条件を評価せずにすぐに条件を終了します。したがって、2番目の条件は評価されないため、エラーをスローしません。

これは、&演算子とは対照的です。これは、両方の式を最初に評価し、エラーを生成します。

this SO postを参照してください。