Domanda

Esiste uno standard comune per la segnalazione di errori nelle funzioni della classe?

Ho visto alcune funzioni c a cui passi la stringa di errore, quindi se c'è un errore puoi vedere cosa c'è in quella stringa, tuttavia hai bisogno di puntatori per quello.

Sono riluttante a usare il ritorno, perché a volte hai bisogno del ritorno per altre variabili.

Una cosa che stavo provando è usare un oggetto di ritorno standardizzato che contiene una chiave di errore, oltre ai dati. Questo sembra funzionare bene, ma quando lo si utilizza con altre classi, sembra un po 'goffo.

quindi ecco la mia ultima idea, la classe ha una variabile interna $ error e ogni volta che viene chiamata una funzione, $ error viene cancellata e aggiornata con la stringa o l'array di errori (potrebbe persino contenere più di un errore) e quando il funzione completata possiamo verificare se l'errore è vuoto.

ecco il problema con questo, se sto usando le funzioni all'interno delle funzioni, finisco per cancellare l'errore. Potrei contenere la stringa all'interno di una var diversa e spingerla in errore solo una volta prima del ritorno.

hai altre idee per farlo con grazia e affidabilità?

È stato utile?

Soluzione

Questo è un argomento spesso dibattuto e non esiste una vera risposta.

Ma qui ci sono quattro schemi più comuni con cui ho familiarità

  1. Eccezioni
  2. Valori di ritorno multipli / codici di errore
  3. Parametro errore
  4. Stato errore

E un rapido esempio di ciascuno

Eccezioni

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();
}

Codici di errore

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';
}

Parametro di errore

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

$error = false;

doSomething( $error );

if ( $error )
{
  echo $error;
}

Stato errore

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();
}

Devi valutare i pro e i contro di ciascuno prima di scegliere un sistema (o una combinazione di sistemi) per il tuo progetto.

Altri suggerimenti

Non esiste uno standard comune. La soluzione dipende interamente dalle tue esigenze particolari.

Prendi in considerazione l'apprendimento e l'utilizzo di eccezioni . Non sono una soluzione universale, ma se usati correttamente faranno molto per rendere il tuo codice più leggibile e comprensibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top