отчеты об ошибках php - PullRequest
       19

отчеты об ошибках php

1 голос
/ 27 октября 2009

Существует ли общий стандарт для сообщения об ошибках в функциях вашего класса?

Я видел некоторые функции c, которым вы передаете строку ошибки, так что если есть ошибка, вы можете увидеть, что это за строка, хотя вам нужны указатели для этого.

Я не хочу использовать возврат, потому что иногда вам нужен возврат для других переменных.

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

Итак, вот моя последняя идея: у класса есть внутренняя переменная $ error, и каждый раз, когда вызывается функция, $ error очищается и обновляется строкой или массивом ошибок (может даже содержать более одной ошибки), и когда функция завершается, мы можем проверить, если ошибка пуста.

вот в чем проблема: если я использую функции внутри функций, я в конечном итоге очищаю ошибку. Я мог бы держать строку внутри другой переменной и выдавать ошибку только один раз перед возвратом.

есть другие идеи сделать это изящно и надежно?

Ответы [ 3 ]

4 голосов
/ 27 октября 2009

Это часто обсуждаемая тема, и нет единого правильного ответа.

Но вот четыре наиболее распространенных паттерна, с которыми я знаком

  1. Исключения
  2. Несколько возвращаемых значений / коды ошибок
  3. Параметр ошибки
  4. Состояние ошибки

И краткий пример каждого

Исключения

function doSomething()
{
  if ( /* expression */ )
  {
    throw new Exception( 'something went wrong' );  
  }
}

//  Let the registered exception handler do the work
doSomething();

//  Or handle this call specifically
try {
  doSomething();
}
catch ( Exception $e )
{
  echo $e->getMessage();
}

Коды ошибок

function doSomething()
{
  if ( /* expression #1 */ )
  {
    return -1;
  }

  if ( /* expression #2 */ )
  {
    return -2;
  }
  return 1;
}

$return = doSomething();

switch ( $return )
{
  case -1;
    echo 'Error #1 Found';
    break;
  case -2;
    echo 'Error #2 Found';
    break;
  default:
    echo 'Success';
}

Параметр ошибки

function doSomething( &$error )
{
  if ( /* expression #1 */ )
  {
    $error = 'Something went wrong';
  }
}

$error = false;

doSomething( $error );

if ( $error )
{
  echo $error;
}

Состояние ошибки

class Foo
{
  private $error = false;
  private $errorMsg;

  public function doSomething()
  {
    if ( /* expression */ )
    {
      $this->setError( 'Something went wrong' );
    }
  }

  public function isError()
  {
    return $this->error;
  }

  public function getErrorMsg()
  {
    return $this->errorMsg;
  }

  private function setError( $message )
  {
    $this->error = true;
    $this->errorMsg = $message;
  }
}

$f = new Foo();
$f->doSomething();

if ( $f->isError() )
{
  echo $f->getErrorMsg();
}

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

1 голос
/ 27 октября 2009

Единого стандарта нет. Решение полностью зависит от ваших конкретных потребностей.

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

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

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