有可能對案例進行邏輯控制嗎?PHP開關和案例邏輯控制
即:
$v = 0;
$s = 1;
switch($v)
{
case $s < $v:
// Do some operation
break;
case $s > $v:
// Do some other operation
break;
}
有沒有辦法做同樣的事情?
有可能對案例進行邏輯控制嗎?PHP開關和案例邏輯控制
即:
$v = 0;
$s = 1;
switch($v)
{
case $s < $v:
// Do some operation
break;
case $s > $v:
// Do some other operation
break;
}
有沒有辦法做同樣的事情?
不是最易讀的用法,但是可以。
使用if/else - if/elseif/else結構如果您確實需要一個簡單的比較。
非常感謝Gianps –
這不起作用,每個案例都需要是標量值。在你的例子中,它甚至更糟糕,它可能似乎工作,但...
$ s < $ v的計算結果爲false,這會觸發$ v,因爲它在這裏是0。
非常感謝Kris! :) –
http://php.net/manual/en/control-structures.elseif.php
if ($a > $b) {
echo "a is bigger than b";
} elseif ($a == $b) {
echo "a is equal to b";
} else {
echo "a is smaller than b";
}
傳遞給切換的條件是所述箱子來比較的值。條件(在你的問題$ v中)被評估一次,然後PHP尋找匹配結果的第一個情況。
From the manual(後實施例#2),加上強調:
switch語句執行由線(實際上,由語句語句)線。一開始,沒有代碼被執行。 僅當發現一個case語句的值與switch表達式的值匹配時,PHP纔開始執行語句。 PHP繼續執行語句,直到切換塊結束,或者第一次看到break語句。
在你的問題switch ($v)
是一樣的,如果你寫:switch (0)
,因爲$v = 0
。然後,你的交換機將試圖找到它等於0的情況下,而且,正如@Kris said:
$ S < $ V評估爲假,這在$ V觸發,因爲它在這裏是0。
如果必須使用case語句的條件,您的開關狀態應該是一個布爾值,例如:
$v = 0;
$s = 1;
switch (true) {
case ($s < $v):
echo 's is smaller than v';
break;
case ($s > $v):
echo 's is bigger than v';
break;
}
現在你的交換機試圖尋求計算結果爲true
第一案,在這種情況下將是$s > $v
。
注意的是,雖然開關條件只計算一次,案件分別以評估:
$a = 1;
switch ($a) {
case 2:
echo 'two';
break;
case (++$a > 2):
break;
default:
echo $a;
}
回波從默認情況下「2」,因爲比較$一個「2時「$ a是1,案件被丟棄;同時:
$a = 1;
switch ($a) {
case (++$a > 2):
break;
case 2:
echo 'two';
break;
default:
echo $a;
}
回聲 '兩節' 從案例 '2',因爲++$a > 2
增加$ A,但不匹配$一個。
default
是一個後備,它的位置並不重要。
注意:前面提到的開關非常富有且深奧,只是作爲一個例證。
爲什麼要使用開關?改用if-else梯子。 – Dev
用於較簡單的代碼。在當前代碼中使用wsitch對我來說更容易 –
爲什麼不嘗試它並親自查看? –