2011-04-05 79 views
2

不是一個重要的問題,只是想知道是否有任何的onliner來做到這一點。Oneliner將一個字符串前置或附加到另一個

function addString($text, $add, $type = 'prepend') { 
    // oneliner here 
    return $text; 
} 

$text = 'World'; 
addString($text, 'Hello ', 'prepend'); // returns 'Hello World' 
addString($text, ' Hello', 'append'); // returns 'World Hello' 

任何想法? :)

+1

無論我的答案如何,我不得不說,爲此創建一個函數可能是不必要的,除非您可能在不知道是否需要預先安排/附加。 (即:不要使用這個來代替'$ text。= $ add'等) – 2011-04-05 20:16:45

回答

5

這個怎麼樣,使用ternary ?: operator

function addString($text, $add, $type = 'prepend') { 
    return $type=='prepend' ? $add . $text : $text . $add; 
} 


注:其實我可能不會使用 - 並保持了經典的if/else:不是一個襯墊,不太好閱讀......但可能更容易理解;並有可理解的代碼是非常重要的。註釋後


編輯:如果你想確保$type或者是'append''prepend',並仍然希望一行程序,你可以用的東西是這樣的:

function addString($text, $add, $type = 'prepend') { 
    return ($type=='prepend' ? $add . $text : ($type=='append' ? $text . $add : '')); 
} 

但是,你的代碼將變得難以閱讀 - 現在是時候去做一些比一行代碼更長的東西,而且更容易理解。


例如,爲什麼沒有這樣的事情:

function addString($text, $add, $type = 'prepend') { 
    if ($type === 'prepend') { 
     return $add . $text; 
    } else if ($type === 'append') { 
     return $text . $add; 
    } else { 
     // Do some kind of error-handling 
     // like throwing an exception, for instance 
    } 
} 

畢竟,行數已經在路上幾乎沒有影響的代碼被執行 - 並再次,重要的是你的代碼很容易理解和維護。

+0

我想過三元運算符,但我想確定這是'prepend'或'append',如果有人提供別的什麼? – JohnT 2011-04-05 20:08:20

+0

必須同意您對代碼易讀性的觀點,但我認爲在當今時代,單一的三元運算符幾乎可以。 (當人們開始嵌套它們時,是時候進行一些聊天了。):-) – 2011-04-05 20:12:47

+1

@JohnT我用一些筆記編輯了我的答案;; @middaparka關於一個三元運算符是真實的,但是,正如你所說,嵌套它們導致地獄......我見過那些經常嵌套的東西...... – 2011-04-05 20:15:30

0
return $type == 'prepend' ? $add . $text : $text . $add; 
0

你可以使用一個ternary operator實現這一如下:

function addString($text, $add, $type = 'prepend') { 
    return $type == 'prepend' ? $add . $text : $text . $add; 
} 

什麼三元運算符是有效的做的是檢查的首要條件(在?之前查看它是否評估爲true,如果是,則將返回值設置爲t他聲明到$add . $text,如果不是如果使用最後一個塊(在:之後)將返回值設置爲$text . $add

作爲PHP手冊所說:

表達式(表達式1)? (expr2): (expr3)如果expr1 的計算結果爲TRUE,則計算爲expr2;如果expr1 的計算結果爲FALSE,則expr3計算爲expr2。

因此,如果有人提供了比「prepend」以外的東西作爲$type參數的值,那麼這將始終默認爲第二個條件和追加。

0

$ text =($ type ==='prepend')? $ add。$ text:$ text。$ add;

相關問題