Какой код более эффективен? - PullRequest
0 голосов
/ 24 декабря 2011

Мне было интересно, какой код более эффективен, то есть быстрее и надежнее. Когда я размещаю данные своего клиента на своем веб-сайте, я не позволяю им использовать что-либо еще, кроме буквенно-цифровых символов, поскольку другие не нужны. Мой вопрос был, будет ли исключение быстрее и надежнее для этого? Или я должен держаться подальше от исключений в этой цели? Вот мой код.

Нормальный путь -

function checkStr ($str)
{
  if (preg_match('/[^0-9a-zA-Z]/', $str) > 0))
  {
     return false;
  }
  else
  {
     return true;
  }
}
if (checkStr($_POST['field']) == true)
{
  //continue
}
else
{
  echo "Invalid characters";
}

Исключение -

function checkStr ($str)
{
    if (preg_match('/[^0-9a-zA-Z]/', $str) > 0)
    {
        throw new Exception('Invalid characters');
    }
    return true;
}

    try
    {
        checkStr($_POST['field']);

        //no exception, continue with code 
    }

    catch (Exception $e)
    {
      echo $e->getMessage();

    }
}

Ответы [ 2 ]

2 голосов
/ 24 декабря 2011

Хотя исключения будут иметь некоторые потери производительности, производительность не является единственным критерием.Учитывайте также размер и сложность кода, а также общее удобство обслуживания.

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

Какой код легче понять

 if ( do this ) 
     if (do that)
        if (something else)
            OK
        else
            bad something
      else
         bad that
 else
      bad this

или с исключениями

 try
     do this
     do that
     something else
 catch
     report error

Я не программист php, но в Java я часто использую исключения.

0 голосов
/ 24 декабря 2011

С исключениями связано больше накладных расходов, чем с обычными функциями управления потоком программ (если, иначе, elseif и т. Д.), Так что чисто с этой точки зрения первый вариант быстрее.Исключения являются хитрыми вещами, и поскольку они являются относительно новым дополнением к PHP, люди склонны злоупотреблять ими.Обычно я пытаюсь генерировать исключения только в тех случаях, когда в коде исключительные обстоятельства.

Например, если у меня есть функция, в которой допустимые входные значения представляют собой целые числа 1-100, то я бы вернул true для входа 40, false для входа 493 и выдал исключениедля входа «кумкват».

Кстати, вы можете написать первую версию вашей функции в одной строке:

function checkStr ($str)
{
    return (preg_match('/[^0-9a-zA-Z]/', $str) > 0));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...