matez, dans l'affichage du tableau, la date du 29 octobre 2006.
Puis analysez mes tests après le print_r ()...
24h correspondent à 86400 secondes.
Entre le 29 octobre et le 30 octobre 2006, il y a 90000 secondes...why??? Décalage pour simuler quoi, au juste ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 29 sept. 2006 à 21:39
Pour être franc avec toi, je n'ai pas encore pleinement exploré les exceptions. Du coup, je ne suis pas super à l'aise avec. Et j'ai tellement l'habitude de gérer avec les false...lol.
Tien...si t'as le temps, donne moi un exemple de ce que tu ferais à ce niveau avec ce code ?
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 29 sept. 2006 à 21:53
En gardant la classe d'exception tel quel :
function getDatesBetween ($dStart, $dEnd) {
$iStart = strtotime ($dStart);
$iEnd = strtotime ($dEnd); if (false $iStart || false $iEnd) {
throw new Exception('Erreur de création de timestamp pour $dStart ou $dEnd');
}
$aStart = explode ('-', $dStart);
$aEnd = explode ('-', $dEnd);
if (count ($aStart) !== 3 || count ($aEnd) !== 3) {
throw new Exception('Erreur lors du décompte jj-mm-yyyy'); // même si je doute que tu ais besoin d'un contrôle ici :o
}
if
(false checkdate ($aStart[1], $aStart[2], $aStart[0]) || false checkdate ($aEnd[1], $aEnd[2], $aEnd[0]) || $iEnd <= $iStart) {
throw new Exception('Erreur lors de la vérification des dates de début et de fin');
} for ($i $iStart; $i < $iEnd + 86400; $i strtotime ('+1 day', $i) ) {
$sDateToArr = strftime ('%Y-%m-%d', $i);
$sYear = substr ($sDateToArr, 0, 4);
$sMonth = substr ($sDateToArr, 5, 2);
$aDates[$sYear][$sMonth][] = $sDateToArr;
}
if (isset ($aDates) && !empty ($aDates)) {
return $aDates;
} else {
return false;
}
}
';
} else {
echo 'Aucune date possible entre les 2 dates séléctionnées';
}
} catch ( Exception $e ) { // La on rentre dans le cas où le gars s'est planté dans une des dates que tu rentres en arguments de fonctions.
echo $e->getMessage();
}
Comme ca, tu gères tes erreurs dans le catch(), et la bonne exécution de ton code dans le try().
Bon à savoir, try{}catch{} peut s'empiler. Ex :
try {
functionx();
try {
functiony();
} catch ( Exception $e1 ) {
die ($e1->getMessage());
}
} catch ( Exception $e2 ) {
die ($e2->getMessage());
}
Je trouve ca beaucoup plus puissant que de faire du "return false" à tout va. Mais tu peux par exemple éviter de voir les messages d'erreurs dans ta fonction. Suffit de dériver la classe d'exception :
class exc_extended extends exception {
public function __construct($code_err) {
require_once('./fichier_avec_les_codes_et_les_msg_d'erreur.php');
parent::__construct($tableau[$code_err], $code_err);
}
}
Ce qui donne dans tes fonctions :
function x {
if ( $x === null ) {
throw new Exception(1);
}
}
Et ca ira chercher le message d'erreur tout seul dans un fichier à part. Surtout si tu fais du multilangage, la gestion des exceptions peut se révéler très puissante par sa modularité :)
Vala vala !
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 29 sept. 2006 à 22:23
Je ne fais pas de multilangage sur notre extranet (pas encore...lol). Par contre, les erreurs et exceptions y sont gérés par ma classe de debugger (qui marche très bien d'ailleurs XD). Donc, c'est une très bonne idée! Même si y a jamais d'erreurs sur cette fonction vu que c'est moi qui l'utilise et que le code l'utilisant est bien fait ;-) Néanmoins, ton truc me permet effectivement de gérer les éventuelles erreurs de code qui ne créent pas d'erreurs internes PHP quelle qu'elle soit.
Donc, je vais adopter!
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 29 sept. 2006 à 22:29
Tu peux aussi l'utiliser pour de la gestion de modules.
Imagine un truc comme ca :
Je fais un système de news ainsi qu'un système de commentaires.
Si la news est bonne, (disons que l'ID est existante en DB) on affiche les commentaires etc... J'ai 2 classes, une pour les news, l'autre les commentaires. Pour mettre tout ca en relation facilement, ca va donner quelque chose comme ca :
try {
$n = new news($news_id);
// etc...
try {
$c = new comments($news_id);
// etc...
} catch ( Exception $e1 ) {
// Erreur, soit pas de commentaire, soit le module de commentaire est desactivé temporairement.
}
} catch ( Exception $e2 ) {
// Soit l'id de news est invalide, soit tout le module de news est desactivé par l'admin.