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