PHP - если что-то так, ничего не делать - PullRequest
2 голосов
/ 03 сентября 2010

Это правильный способ сказать: если что-то не так, ничего не делать?

if ( ($hostNameInfo == $hostNameInput) && ($hostAddressInfo == $hostAddressInput) )
{
  return;
}

Обновление: Я не внутри функции. :( Так что возвращение - это просто чепуха.

Вот еще код:

//if the input fields are equal to database values, no need to update and waste resources,hence, do nothing:
if ( ($hostNameInfo == $hostNameInput) && ($hostAddressInfo == $hostAddressInput) )
{
  //do nothing
}
//If, however, (they are NOT equal and) input fields are not empty:
elseif (!empty($hostNameInput) && (!empty($hostAddressInput)))
{
 //do something.
}

Спасибо заранее, MEM

Ответы [ 5 ]

14 голосов
/ 03 сентября 2010

Возможно, вам следует поступить наоборот, сделать что-то, если ваше состояние не подтверждено

if($hostNameInfo != $hostNameInput || $hostAddressInfo != $hostAddressInput) {
   // do something
}
5 голосов
/ 13 мая 2013

Чтобы ничего не делать, вы можете просто набрать:

function relax() {
    ;
}

if (($hostNameInfo == $hostNameInput) && ($hostAddressInfo == $hostAddressInput)) {
    relax();
}
1 голос
/ 03 сентября 2010

Вы говорите о лучших практиках здесь ..
Одна из лучших практик состоит в том, что у подпрограммы должна быть единичная точка выхода , хотя она широко обсуждается и зависит от разработчика / стиля.

UPDATE:

Новый ответ, поскольку вопрос был изменен:

Не вижу смысла добавлять дополнительные проверки, если код должен работать только при некоторых обстоятельствах. Чтобы сделать код более читабельным, вы должны придерживаться того, что вы считаете легко поддерживаемым, например (или что-то подобное):

// Do something only if required
if (($hostNameInfo != $hostNameInput) || ($hostAddressInfo != $hostAddressInput)) &&
    !empty($hostNameInput) && !empty($hostAddressInput))
{
    echo 'place some code here';
}
1 голос
/ 03 сентября 2010

Я предполагаю, что вы находитесь внутри функции, и в этом случае она выполняет то, что вы ожидаете, хотя несколько return операторов внутри функции могут привести к путанице и недостаточной читаемости. (Видимо, я был не прав.)

Вместо этого я предпочитаю, чтобы все условные блоки (мое описание кода между в if блоке {...}) содержали соответствующий код, то есть записывали условную проверку таким образом, чтобы общее условие оценивается в true, когда требуется дополнительная обработка (подпоток):

if ($hostNameInfo != $hostNameInput || $hostAddressInfo != $hostAddressInput) {
    // do stuff, else skip
}

Кроме того, вы можете извлечь условный оператор для улучшения и читабельности и простоты потока управления:

$hostInfoEqualsInput = ($hostNameInfo == $hostNameInput && $hostAddressInfo == $hostAddressInput);
if (!$hostInfoEqualsInput) {
    ...
}

ОБНОВЛЕНИЕ (на основе обновленного вопроса). Рассмотрим это вместо:

$fieldsAreFilled = (!empty($hostNameInput) && !empty($hostAddressInput));
$hostInfoEqualsInput = ($hostNameInfo == $hostNameInput && $hostAddressInfo == $hostAddressInput);

if ($fieldsAreFilled && !$hostInfoEqualsInput) {
    ...
}

ЭРГО
Минимизируйте частоту ветвлений и избегайте пустых блоков, написав условия, которые вы хотите выполнить, а не все исключения, которые вы хотите игнорировать (субъективно).

0 голосов
/ 03 сентября 2010

Другая возможность - выдать новое исключение, которое вы позже сможете отловить в своем приложении.

ОБНОВЛЕНИЕ: не внутри функции, вероятно, это плохая идея.

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