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. P>
3 Réponses :
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 preuve de concept: em> p> encore meilleur: p> get_defined_vars () code> pour une récupération ultérieure.
Ce sera une forte exception: -)
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 code> en effet. Pour surmonter cela, je recommanderais d'ajouter une méthode
SetState (Array $ State) CODE> et Fournir
get_defined_vars code> 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: I> Les exceptions ne doivent pas être modifiables! Une fois que vous le jetez, cela ne devrait pas changer ... par conséquent, pourquoi SetState () Code> est une mauvaise idée;) PS: B> Voici comment ça se fait dans Symfony (Disclaimer: Je l'ai écrit)
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
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; } }