8
votes

Obtenir le contexte d'exception en PHP

Si vous utilisez un manutention d'erreur personnalisée dans PHP, vous pouvez voir le contexte d'une erreur (la valeur de toutes les variables à l'endroit où elle s'est produite). Y a-t-il un moyen de le faire pour les exceptions? Je veux dire obtenir le contexte, ne pas définir un gestionnaire d'exception.


0 commentaires

3 Réponses :


10
votes

Vous pouvez attacher manuellement le contexte à votre exception. Je n'ai jamais essayé, mais il serait intéressant de créer une exception personnalisée que dans le constructeur appelle et enregistre get_defined_vars () pour une récupération ultérieure.
Ce sera une forte exception: -)

preuve de concept: xxx

encore meilleur: xxx < / pré>


3 commentaires

Hmm, mais get_defined_vars ici n'inclut pas les variables locales du code qui construit l'exception, non?


Pas si elles sont invisibles à la exception en effet. Pour surmonter cela, je recommanderais d'ajouter une méthode SetState (Array $ State) et Fournir get_defined_vars lorsque vous lancez l'exception. J'ai changé le code en conséquence.


La bonne façon de le faire est d'aussi Andrew mentionné ci-dessous. NOTE: Les exceptions ne doivent pas être modifiables! Une fois que vous le jetez, cela ne devrait pas changer ... par conséquent, pourquoi SetState () est une mauvaise idée;) PS: Voici comment ça se fait dans Symfony (Disclaimer: Je l'ai écrit)



2
votes

Exceptions dans PHP:

http: // www. php.net/manual/fr/language.exception.extending.php p>

Méthodes de la classe d'exception de base: P>

final public  function getMessage();        // message of exception
final public  function getCode();           // code of exception
final public  function getFile();           // source filename
final public  function getLine();           // source line
final public  function getTrace();          // an array of the backtrace()
final public  function getPrevious();       // previous exception
final public  function getTraceAsString();  // formatted string of trace


0 commentaires

3
votes

ne pouvez-vous pas aussi faire:

class ContextException extends Exception {

    public $context;

    public function __construct($message = null, $code = 0, Exception $previous = null, $context=null) {
        parent::__construct($message, $code, $previous);
        $this->context = $context;
    }

    public function getContext() {
        return $this->context;
    }
}


0 commentaires