CLASS GALERIE PHOTO

MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011 - 23 févr. 2011 à 03:07
cs_mihajatiana Messages postés 1 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 23 novembre 2011 - 23 nov. 2011 à 15:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52836-class-galerie-photo

cs_mihajatiana Messages postés 1 Date d'inscription jeudi 24 février 2011 Statut Membre Dernière intervention 23 novembre 2011
23 nov. 2011 à 15:02
Je ne comprends rien ce code là!!!
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 18:54
Oui mais c'est un peu plus complexe. C'est de séparer les couches. Php d'un coté, le html de l'autre.
C'est à php de décidé quoi faire en fonction des événements. Si t'as une erreur tu affiches ton erreur (par exemple) ou autre. Sinon tu affiches ta galerie.

Si il y a toujours moyen d'améliorer et ça dépend de tes besoins (puis tu débutes donc faut avancer petit à petit). Tiens encore une petite astuce. Plutôt que de répéter les private, public ou protected tu peux les grouper.

Par exemple :
class A
{
private
$_a,
$_b,
$_c;
protected
$d,
$e,
$f;
}
Xiryl Messages postés 4 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 23 février 2011
23 févr. 2011 à 18:25
ok ok...
autre petite question, ya t'il simple moyen de savoir si ya une exception ou pas ?
par exemple avant d'afficher le html, regarder si tout c bien dérouler et si c le cas on affiche, sinon on affiche rien ?

autre chose sinon de pas bon dans ma source ?
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 18:23
Ça dépend si le problème est rattrapable ou non.
Je te donne un exemple.
Imagine que tu dois lire le dossier "image". Tu tests donc si le dossier est accessible en lecture (test normal avec la fonction is_readable par exemple). Manque de chance les droits de celui-ci on changé et il n'est plus accessible en lecture. Tu lèves une exception car c'est un comportement anormal sur ce dossier.
Ton blog try catch capture l'exception en interne, changes les droits du dossier (voir chmod pour plus de détails) et tu appels de nouveau la méthode.
L'avantage c'est que l'utilisateur ne voit rien et que le problème à été règlé.
Xiryl Messages postés 4 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 23 février 2011
23 févr. 2011 à 18:00
OK je viens de comprendre! merci MagicGilles :)
Alors la suite ?! lol
Comment je fait pour resoudre le probleme automatiquement via l'exception ?
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 17:26
Oui c'est jamais facile au début. Là dans ton code, elles ne servent à rien car un simple echo fait aussi bien (surtout pour le débogage).
ça aurait plus d'utilité en dehors de ta classe. Tu places tes throw new MyException pour indiquer qu'une erreur inattendue vient de se produire et en dehors tu places ton bloc try catch.

try{
$ma_class = new ma_super_classe();
}
catch(MyException $e)
{
echo 'Oops un bug : ' .$e->getMessage() . ' à la ligne : ' . $e ->getLine();
}
Tu peux aussi le mettre en interne mais ça sous entend que ton bloc try catch doit/va essayer de corriger le problème avant de reprendre l'exécution du programme.
Xiryl Messages postés 4 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 23 février 2011
23 févr. 2011 à 14:45
ça sens doute vu que c le début de gestion de class pour moi, ya bcp de truc qui m'échappe lol.
Pour les exceptions, j'ai demander au script pour le moment de m'afficher une erreur si le repertoire n'existe pas ou si il ne peut pas redimentionner, l'erreur s'affiche bien en cas de problemes... après un truc que j'ai pas trouver c comment lui dir a ViewGallery de ne pas affiché si ya une erreur.
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 14:36
Je pense que tu dois revoir les exceptions car je pense qu'il y a un truc qui t'échappe (http://www.php.net/manual/fr/class.exception.php).
Je te donne un exemple :
<?php
$filename= 'mondossier ' . DIRECTORY_SEPARATOR . 'monfichier.png';

try
{
if(!file_exists($filename))
{
throw new MyException(sprintf('Fichier %s non trouvé',$filename))
}
}
catch(MyException $e)
{
echo 'Il y a une erreur avec le message suivant : ' . $e -> getMessage() . ' à la ligne : ' . $e -> getLine();
}
?>
Xiryl Messages postés 4 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 23 février 2011
23 févr. 2011 à 13:57
merci de tes conseil magicgilles.

j'ai modifier selon tes critique ( pour commencer lol )
MagicGilles Messages postés 14 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 12 août 2011
23 févr. 2011 à 03:07
Salut,
2-3 trucs en vrac.
Ta classe à trop de responsabilité, elle n'est pas réutilisable car peu flexible et extensible. On appelle cela le "code spaghetti". Si tu fais une modif, t'es obliger de te replonger dans le code pour savoir qui fait quoi et comment.
Pour bien programmer en objet, il faut qu'une classe est le moins de responsabilité possible (ça évite les erreurs). Par exemple, une classe de connexion à la base de données ne fait que ça. Elle se connecte/déconnecte mais elle ne s'occupe pas des données. Une autre classe sera là pour ça (c'est un exemple).

Maintenant parlons code :
1) Il faut éviter dans la grande majorité les opendir and co. Il y a mieux en php 5 comme RecursiveDirectoryIterator (je te laisse voir la doc sur les itérateurs sur le site php.net). Au pire tu peux utiliser la fonction glob.
2) Pour concaténer 2 variables tu n’es pas obligé de faire $var."".$var2, un simple point suffit : $var.$var2
3) Dans une classe il faut éviter de mettre du (x)html.
4) Il faut tester le résultat de chaque fonction. Par exemple GetImageSize retourne false en cas d'erreur. Il faut traiter ce cas.
Voila pour un début
Rejoignez-nous