2012-10-06 63 views
0

我碰到這個腳本來在http://www.php.net/manual/en/function.str-split.php#78040是`和`最佳實踐

/** 
    Returns a formatted string based on camel case. 
    e.g. "CamelCase" -> "Camel Case". 
    */ 
    function FormatCamelCase($string) { 
      $output = ""; 
      foreach(str_split($string) as $char) { 
        strtoupper($char) == $char and $output and $output .= " "; 
        $output .= $char; 
      } 
      return $output; 
    } 

的珍玩部分:

strtoupper($char) == $char and $output and $output .= " "; 

我的問題

  • 詳細突破strtoupper($char) == $char and $output and $output .= " ";下來,爲什麼它有效
  • 這不適用於breakreturnecho但它適用於print
  • 任何功能,包括是否爲

    if (strtoupper($char) == $char) { 
        if ($output) { 
         $output .= " "; 
        } 
    } 
    

    對於這個最佳實踐

  • 做這樣的代碼有什麼優勢或劣勢
+0

我不會在PHP中使用'和',雖然它會工作 - 使用'&&'而不是。 – halfer

+0

@halfer:它不適用於&&,因爲'和'的優先級低於'。='和'&&' - 高。所以在技術上它會毫無錯誤地執行,但不會像預期的那樣運行。 – zerkms

+0

謝謝@zerkms。我不知道'&&'和'和'有不同的優先級 - 值得了解! – halfer

回答

4

這是相同的代碼A and BB將被執行,如果A被評估爲真。

&&and之間的區別是&&具有比and更高的優先級,.=在它們之間。

+1

「對於代碼A和B,如果A被評估爲false,則B將被執行。 ---呃,不。實際上是相反的。 ''和'行爲與'&&'完全一樣,但有另一個優先 – zerkms

+0

@zerkms nope .... – xdazz

+0

「nope」是什麼?... – zerkms

0

strtoupper($ char)== $ char和$ output以及$ output。=「」;

意味着

if(strtoupper($char) == $char && $output && $output.=" "){ 
// if string is equal than it checks for $output 
//is that present? 
// if present than it checks for $output value 
//and add a space to that if everything works fine than go to true part 
} 
+0

'$ output ==「」'是不一樣的'$ output。=「」;' – Baba

+0

@Baba哎呀抱歉有錯誤.. – StaticVariable

+0

根據zerkms :_it不會與'&&'一起使用,因爲'and'的優先級低於'。='和'&&' - higher._ http://php.net/manual/en/language.operators.precedence.php –

1
strtoupper($char) == $char and $output and $output .= " "; 

是一種手短,如果第一它會檢查,如果它是一個大寫字符,如果讓他進入下一併檢查是否$output不爲空,然後他加入空間$輸出

它不是最好的做法,但使用一個襯墊感覺涼爽

人和的優勢是,它的涼爽 迪sadvantage是,你需要閱讀一遍又一遍地去理解它

+0

+1非常有趣....喜歡酷的部分...買它爲什麼有效.. – Baba

+0

@Baba:爲什麼它應該是無效的? – zerkms

+0

@Baba因爲它與布爾值計算 – EaterOfCode

4

http://en.wikipedia.org/wiki/Short-circuit_evaluation

至於其他的答案都表示,以後每語句只執行,如果前面的語句==真。

這是類似的代碼更相關的:if(foo和bar){//做一些事情}

如果富== false,那麼就沒有必要浪費時間去評估吧。

我不能說我在布爾邏輯之外使用短路評估來獲得我的優勢,並且爲了其他編碼人員查看我的代碼,我現在可能無法啓動。

+0

查看以'is_bool($ var)== true'開始的更新代碼給出不同的結果 – Baba

+1

我跑了你的兩個例子和兩次我的輸出是: 字符串(2)「AB」 –

+0

重新啓動Apache和一切現在AB – Baba

0

,你得在這裏,包括與邏輯and運營商連接在一起的三個子表達式的表達式:

 strtoupper($char) == $char and $output and $output .= " "; 
          A  and B and  C 

的順序是這樣簡單的由左到右,因爲運算符優先級。

因爲那是,你可以通過。我想你明白A和B和C自己做了什麼。但是,如果PHP將這三個中的任何一個評估爲false,則退出執行整個表達式。該表達式運行至false正在執行(否則PHP無法說出結果,請參閱Short-circuit evaluation)。

它讀取:字符是大寫和輸出,並添加一個空間輸出。

如果字符不是大寫,那麼這句話是錯誤的。所以它不會持續超過:

它讀取:字符不是大寫。

讓我們把這個句子說成是大寫字母。但沒有輸出:

它讀取:字符是大寫的,沒有輸出。

最後讓我們說有輸出:

它讀取:字符是大寫的輸出,並添加一個空格輸出。

把編程語言當作一種語言來表達。

這只是一個常見的表達。有些程序員不使用它來編寫表現力的表達,在他們的心智模式它更是基本一樣,如果寫的那麼其他風格:

if (A) then if (b) then C. 

,上面寫到:如果字符大寫那麼如果輸出再添加一個空格輸出。

做什麼最適合你。只需閱讀代碼。它有助於:

strtoupper($char) == $char and $output and $output .= " "; 

字符是大寫和輸出,並添加一個空間輸出。