Как можно использовать Interval по-разному в php - PullRequest
1 голос
/ 27 октября 2010

Мне нужно решить проблему, как показано ниже. Я не уверен, вы можете предложить лучший метод?

switch(true){
    case $price>100:
        tooHigh(); 
    break;
    case (($price<=100) && ($price>70)):
        negotiate(); 
    break;
    case (($price<=70) && ($price>20)):
        accept(); 
    break;
    case ($price<=20):
        thankAndEscape(); 
    break;
}

Ответы [ 4 ]

2 голосов
/ 27 октября 2010

if ($price <= 20) {
        thankAndEscape(); 
} elseif ($price <= 70) {
        accept();
} elseif ($price <= 100) {
        negotiate(); 
} else {
        tooHigh(); 
}
  1. переключатель (true) необходим в небольшом количестве случаев; тот факт, что вы делаете проверку с помощью выражений внутри ключевого слова case, означает, что синтаксис вообще не подходит, это хорошая причина для использования конструкции if ... elseif.
  2. switch ... case синтаксис имеет более высокую производительность в PHP, чем если бы ... иначе в случае, если нет default case, поэтому, учитывая предложенное мной решение (которое имеет вариант по умолчанию), я бы используйте синтаксис switch ... case.
  3. Выполняя последовательные проверки, начиная с самого низкого ценового диапазона и увеличивая его шаг за шагом, вам не нужно проверять весь диапазон, поскольку первая точка интервала, безусловно, больше, чем последняя из предыдущей проверки , Решение, которое я предлагаю, является более простым и надежным, и, кроме того, обеспечивает лучшую производительность.

Попробуйте и опубликуйте результаты / ваши впечатления (информация о выступлениях приветствуется:)

Ура!

2 голосов
/ 27 октября 2010
if($price > 100)
{
  //too high
  tooHigh()
}
elseif($price > 70) //it wasn't greater than 100 - is it greater than 70?
{
  //negotiate
  negotiate()
}
elseif($price > 20) //OK, wasn't greater than 70 OR 100 - greater than 20 then?
{
  //accept
  accept()
}
else //Guess not - just don't do anything
{
  //thank and escape
  thankAndEscape()
}

Кейс-заявления, к сожалению, не могут выполнять условия. Они действительно «если это так, то ...» в жестокой честности

Это должно работать, так как условия будут просто переходить к следующему, пока не достигнут дна. если один соответствует - остальная часть утверждения игнорируется ... То есть, если у меня правильная логика вверх ...

Не думаю, что вам нужно выполнять сопоставление диапазонов, поскольку оно уже является родным для оператора if. Например. Утверждение «между 70 и 20» упрощается до более 20 ниже 70 в отдельных условиях. Немного эффективнее и проще для чтения.

1 голос
/ 27 октября 2010
if ($price>100)
{
        tooHigh(); 
}
elseif($price<=100) && ($price>70))
{
        negotiate(); 
}
elseif(($price<=70) && ($price>20))
{
        accept(); 
}
elseif ($price<=20)
{
        thankAndEscape(); 
}

выглядит более компактно и читабельно, не так ли?

0 голосов
/ 27 октября 2010

Используйте do-while.

do {

if($price > 100) { tooHigh(); break; }

} while(false);

http://php.net/manual/de/control-structures.do.while.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...