2008-09-19 24 views
0

比方說,我有這樣的代碼:PHP:返回的一個部分,如果(){}

if (md5($_POST[$foo['bar']]) == $somemd5) { 
    doSomethingWith(md5($_POST[$foo['bar']]); 
} 

我能縮短下來做:

$value = md5($_POST[$foo['bar']]; 
if ($value == $somemd5) { 
    doSomethingWith($value); 
} 

但是它有什麼預設置包含當前第一個或第二個條件的變量if?例如:

if (md5($_POST[$foo['bar']]) == $somemd5) { 
    doSomethingWith($if1); 
} 

可能是不必要的做法,但我只是想知道。

+0

什麼是'foo`,一個錯字?你的意思是`$ foo`? – 2012-05-28 18:15:11

+0

@ColeJohnson你是對的,我的意思是`$ foo`。 – Eikern 2012-05-28 18:33:26

回答

7

不,但由於賦值本身是一個表達式,因此可以使用賦值作爲if語句的條件表達式。

 
if (($value = md5(..)) == $somemd5) { ... } 

在一般情況下,雖然,你一定要避免嵌入到作業條件表達式:

  • 的代碼密度更大,因此更難閱讀,更多的嵌套的括號。
  • Mixing =和==在同一個表達式中只是要求它們混合起來。
1

由於if只是使用表達式的結果,所以不能訪問它的部分內容。 只需將函數的結果存儲在變量中,就像您在第二個代碼段中所寫的那樣。

1

恕我直言你的第二個例子(引用下面的情況下,以防有人編輯問題)就好了。你可以用一些技巧來掩蓋代碼,但對我來說這是最好的。在更復雜的情況下,這個建議可能不適用。

$值= MD5($ _ POST [富[ '酒吧']];

如果($值)== $ somemd5){

doSomethingWith($value); 

}