是否有可能使用的switch-case三個參數,就像這樣:帶三個參數的開關盒?
switch($var1, $var2, $var3){
case true, false, false:
echo "Hello";
break;
}
如果不是這樣,我應該只是使用if-else或是否有更好的解決辦法?
是否有可能使用的switch-case三個參數,就像這樣:帶三個參數的開關盒?
switch($var1, $var2, $var3){
case true, false, false:
echo "Hello";
break;
}
如果不是這樣,我應該只是使用if-else或是否有更好的解決辦法?
語法不正確,我不會推薦它,即使它是。但是,如果你真的想用這樣的一個結構,你可以把你的價值觀到一個數組:
switch (array($var1, $var2, $var3)) {
case array(true, false, false):
echo "hello";
break;
}
我認爲最好讓所有人都忘記它。 – soulmerge 2009-08-28 07:45:48
@soulmerge這有什麼不好的?如果這種方法有效,它就是我正在尋找的東西! – 2012-09-22 04:54:15
這裏沒有切換情況。你有多個條件:
if($var && !($var2 || $var3)) { ...
這也匹配true,false,true等。 – 2009-08-25 14:09:30
您可以使括號中的子句成爲OR(||),而不是 – 2009-08-25 14:10:30
我只想用的if/else
if($var1 == true && $var2 == false && $var3 == false){
echo "Hello";
}
或
if($var1 && !($var2 && $var3)) {
echo "Hello";
}
我不知道 - 如果你真的想這樣說 - 也許將它們全部轉換爲字符串,連接,然後在case情況下使用結果字符串?
另一種選擇是創建三個參數映射到整數的功能和使用,在開關聲明。
function MapBool($var1, $var2, $var3){
// ...
}
switch(MapBool($var1, $var2, $var3)) {
case 0:
echo "Hello";
break;
// ...
}
我想,類似於Alex Feinman的回答,但沒有解釋如何。 – OIS 2009-08-25 14:58:46
不完全。你可以用這個函數做任何事情。但接受布爾值爲3位字節的位是最合理的實現,是的。 – 2009-08-25 18:09:04
這是諸如此類的事情,過去由按位運算符來處理:
if (($var1 << 2) & ($var2 << 1) & $var3) == 4) ...
...回來時,「真」是1
話雖這麼說,上述簡潔,但很難閱讀和維護。不過,如果你有很多類似的語句,移位/取與可能的方式去得到控制的事情:
switch (($var1 << 2) & ($var2 << 1) & $var3)) {
case 0: // false, false, false
...stuff...
case 1: // false, false, true
...different stuff...
// all 8 cases if you REALLY care
}
只是一個提示:有些使用開關簡單的數據查詢,但是對於數組是更好。 – OIS 2009-08-25 14:16:57