[objet] [PHP]

[PHP] [objet] - PHP - Programmation

Marsh Posté le 10-05-2002 à 14:00:23    

hello tous,
 
Je développe toujours mon forum en PHP objet, et je me pose la question :  
Les messages d'erreurs doivent se trouver dans la classe ou dans la page php ?
 
Pour ce qui est de la gestion de l'accès à la BD entre autre, ça me parait clair.  Si le serveur n'est pas joignable, l'application ne sait pas se dérouler correctement... donc dans la classe, je fais un echo et un exit. (je me suis inspiré de la PHPlib je l'avoue  :ange: )
 
Pour ce qui est par exemple de l'affichage de la liste des sujets, si l'utilisateur n'a pas les droits requis pour lister les sujet d'un forum, ou si le forum n'existe pas, ou s'il est fermé.  

  • est-il plus correct de faire ces tests dans la méthode d'initialisation du forum (je suis obligé de faire passer l'objet utilisateur pour ces tests) et d'afficher le message d'erreur + exit (même principe que la classe de gestion de la bd):

$forum->setID($idForum, $objuser);
 

  • la même chose mais la méthode retournerait un code d'erreur correspondant.  L'affichage du message d'erreur est fait dans la page php :

switch($forum->setID($forumID)){
  case 0: break;
  case 1: echo "faut être enregistré"; exit; break;
  ...
  default: echo "Problem"; exit; break;
}
 
inconvénient : les tests sont tous effectués 2x, une fois pour le return error, une fois pour l'affichage du message.  Sans compter que théoriquement l'objet forum n'a théoriquement pas besoin de connaitre l'objet user...
 

  • la méthode retournerait true or false en fonction de l'existence du forum (et encore, je peux le faire par après).  Tout les autres tests sont effectués dans la page php :

if (!$forum->setID($forumID)){ //ou if (!$forum->exist())
  echo "existe pas";
}
if ($forum->getReadAccess()==1 && !$objuser->isRegistered()){
  echo "faut être enregistré";
}
...
 
l'avantage de la dernière méthode vient du fait que si je crée un autre site avec un forum dont les règles ne sont pas les mêmes (pas besoin de gestion de l'utilisateur par ex), ma classe ne doit pas être modifiée.
"l'inconvénient" est ça fait un peu plus fouilli :(
 
alors ça vous a inspiré tous ça ?
merci d'avance :)

 

[jfdsdjhfuetppo]--Message édité par ethernal le 10-05-2002 à 14:01:07--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 10-05-2002 à 14:00:23   

Reply

Marsh Posté le 12-05-2002 à 02:35:55    

la question n'est pas claire ?

Reply

Marsh Posté le 12-05-2002 à 02:55:16    

ethernal a écrit a écrit :

la question n'est pas claire ?


brouillard total pour moi. le seul truc que je peux dire, c'est que faire des echo "machin" en plein milieu du code c'est pas génial. si tu veux changer tes messages, traduire, etc. il vaut mieux utiliser des constantes définies ensemble (par ex).

Reply

Marsh Posté le 12-05-2002 à 03:52:45    

:jap:  :love:   une réaction  :)  
 
La question porte sur "comment gérer les messages d'erreurs et leur affichage dans une classe ?" .
 
c vrai que je ne trouve pas non plus très propre de sortir en plein milieu... mais je voulais des confirmations.  
Donc j'élimine la première solution.   :jap:  
 
Est-il mieux de retourner  
- un objet erreur  
- un code d'erreur
- ou un message d'erreur  
si qqch s'est mal passé dans une méthode pour l'afficher dans la page php ?
 
Prenons l'exemple d'une classe véhicule
class véhicule{
  var $nbroues;
  var $cylindrée;
  ...
   
  function véhicule(){
  }
 
  function setnbRoues($nb){
       $this->nbroues= $nb;
  }
 
}
 
qu'est ce qui est correct :

function setnbRoues($nb){
    switch($nb){
    case 0: $error="n'existe pas"; break;
    case 1: $error="impossible"; break;
    case 3: $error="un tricycle ?"; break;
    default : $this->nbroues= $nb;
              $error=true;  
    }
    return $error;
  }
//qd on utilise la méthode, on teste si un message d'erreur est retourné et on l'affiche
 

function setnbRoues($nb){
    if ($nb!=0) {
       $this->nbroues= $nb;
       return true;  
    }
    else return false;
  }
//qd on utilise la méthode, on teste si elle retourne false, dans ce cas on fait les tests qui s'imposent pour afficher le message d'erreur correspondant.

 

[jfdsdjhfuetppo]--Message édité par ethernal le 13-05-2002 à 00:17:21--[/jfdsdjhfuetppo]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed