Restituisce il codice di stato in cui si è verificato uno dei molti errori

3

Sto sviluppando un componente di accesso PHP che include funzioni per manipolare l'oggetto Utente, come $User->changePassword(string $old, string $new) Quello di cui ho bisogno di un consiglio è come restituire uno stato, poiché la funzione può avere successo (non è necessario fornire ulteriori informazioni) o fallire (e il codice chiamante deve sapere perché, ad esempio, password errata, problema di database ecc.)

Ho trovato le seguenti idee:

  • Stile Unix: restituisce 0 in caso di successo, un altro codice in caso di errore. Questo non sembra particolarmente diffuso in PHP e la coercizione di tipo del linguaggio ne mette in crisi (una funzione che restituisce FALSE in caso di successo?) Questo sembra essere il migliore che possa pensare.
  • Genera un'eccezione in caso di errore. Il supporto delle eccezioni di PHP è limitato e questo renderà la vita più difficile a chiunque cerchi di utilizzare le funzioni.
  • Restituisce un array, contenente un booleano per "successo" o meno, e una stringa o un int per "stato di errore", se applicabile.

Nessuno di questi sembra particolarmente allettante, qualcuno ha qualche consiglio o idee migliori?

    
posta Joe Malt 14.12.2012 - 22:27
fonte

1 risposta

2

Mi piacerebbe usare le eccezioni, perché è meno probabile che tu superi o maneggi una condizione di errore. Se devi definire i codici di errore o creare strutture personalizzate, devi tenerne conto manualmente nel chiamante e nel chiamato.

Se dimentichi che un errore critico è (ad esempio) il numero intero di restituzione 3, ciò non impedirà necessariamente che il tuo codice entri in uno stato non valido o che salvi dati non validi.

Se vuoi restituire più motivi di errore, puoi sempre estendere le eccezioni :

class MyException extends Exception
{
    // Redefine the exception so message isn't optional
    public function __construct($message, $code = 0, Exception $previous = null) {
        // some code

        // make sure everything is assigned properly
        parent::__construct($message, $code, $previous);
    }

    // custom string representation of object
    public function __toString() {
        return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
    }

    public function customFunction() {
        echo "A custom function for this type of exception\n";
    }
}
    
risposta data 15.12.2012 - 00:07
fonte

Leggi altre domande sui tag