monexception.class.php

    <?php
    /**
     * Gestion des exceptions pour les exemples du tutoriel
     *
     * @author François Piat
     *
     */
    class MonException extends Exception {
    	/** @var boolean Indique si phase développement ou production */
    	public static $is_dev = false;
    	/** @var boolean Indique si arrêt quand erreur */
    	protected $stop;
    	/** @var array Texte des messages d'erreur */
    	protected $textes = array(
    						'Erreur inconnue',
    						'Modèle invalide',
    						'Nombre de cordes invalide',
    						'Prix invalide');

    	/**
    	 * Constructeur
    	 *
    	 * @param string|int	$p1		Texte ou numéro d'erreur
    	 * @param boolean		$p2		Indique si arrêt après erreur
    	 */
    	public function __construct($p1, $p2 = true) {
    		if (is_numeric($p1)) {
    			($p1 < 0 || $p1 >= count($this->textes)) && $p1 = 0;
    			$msg = $this->textes[$p1];
    		} else {
    			$p1 = trim($p1);
    			if (trim($p1) != '') {
    				$msg = $p1;
    			} else {
    				$msg = $this->textes[0];
    			}
    		}
    		parent::__construct($msg, 0);
    		$this->stop = (bool) $p2;
    	}
    	/**
    	 * Affichage du message d'erreur et arrêt éventuel du script
    	 *
    	 */
    	public function __toString() {
    		if (! self::$is_dev) {
    			if ($this->stop) {
    				ob_end_clean();
    				exit('Site inaccessible');
    			}
    			return;
    		}

    		echo '<hr><b>Exception capturée : </b>',
    			$this->getMessage(),
    			str_replace('#', '<br>#', $this->getTraceAsString());

    		if ($this->stop) {
    			exit('<hr>');
    		}
    	}
    }
    ?>