2011-06-10 158 views
0

我試圖做很多檢查,我發現,如果我用簡短的if語句我會產生一個較短的代碼,它可以減少大約100線降低我的腳本PHP短if語句問題

if (($options['vss_check'] == 'all' ? 
    check_facebook() && check_plusone() : 
    ($options['vss_check'] == 'fbonly' ? 
     check_facebook() : 
     ($options['vss_check'] == 'poonly' ? 
     check_plusone() 
     ) 
    ) 
    ) &&!is_null($content) &&!is_feed()) { 

但是我得到一個語法錯誤'意外)'在該行 我做錯了什麼? 謝謝

+1

O_O更短?也許。可理解?絕對不。 – deceze 2011-06-10 09:10:25

+0

如果我在項目中遇到此代碼,我會立即點擊'blame/show annotations'。這在裏面咆哮着。 – 2011-06-10 09:11:43

+0

這就是爲什麼人們suposed寫__readable__和__comprehensible__代碼 - 因爲有一天他們可能需要將它張貼到SO!而且,如果佈局合理,這些問題通常會變得明顯。 – mkilmanas 2011-06-10 09:12:41

回答

8

你應該避免這種情況,因爲它使你的代碼更難閱讀和調試。

你的錯誤,你必須

($options['vss_check'] == 'poonly' ? check_plusone()) 

它缺少:和值,如果條件爲假。

+0

是的,它,讓我修復另一個錯誤,我會標記爲解決 – SAFAD 2011-06-10 10:07:00

3

我本來以爲你現在意識到,把一切在一行使得它難以匹配括號,並確保你的代碼是正確的。這是非常糟糕的做法:您應該儘可能讓代碼儘可能易讀,而不是儘可能少的行。

如此說來,通過更理智鋪設代碼了一點點,我得到

if (
    ($options['vss_check'] == 'all' ? check_facebook() && check_plusone() : 
     ($options['vss_check'] == 'fbonly' ? check_facebook() : 
      ($options['vss_check'] == 'poonly' ? check_plusone()))) 
    && !is_null($content) && !is_feed()) 
{ 

從這裏我可以看到,最終三元操作者沒有:一部分......改變該行

  ($options['vss_check'] == 'poonly' ? check_plusone() :))) 

應該工作。但我不建議你在那裏停下來:這段代碼需要佈置得更加明智。