[Résolu] Isset() Centraliser les erreurs

Isset() Centraliser les erreurs [Résolu] - PHP - Programmation

Marsh Posté le 29-08-2011 à 19:41:09    

Bonjour !
Je développe un site plus ou moins important en Php + Doctrine et je suis face à un élément redondant.
 
Sur pas mal de pages, je récupère un élément de la base de données pour afficher son détail. Du coup à chaque fois, je fais un isset sur ma variable de retour et affiche un message comme quoi il y a un problème.
 
Le truc c'est que ça fait pas mal de répétition de code du genre :
 

Code :
  1. if (!$myItem) {
  2.     include('pagenotfound.php');
  3.     exit();
  4. }


 
Donc je pensais centraliser tout ça avec une fonction du style :
 

Code :
  1. function checkIsSet($var) {
  2.     if (!$var) {
  3.         include('pagenotfound.php');
  4.         exit();
  5.     }
  6. }


 
Comme vous en doutez, pour faire appel à ma fonction, j'utilise la variable donc je me retrouve avec une notice :
 

Citation :

Notice: Undefined variable: myItem in...


 
Existe t-il un moyen plus élégant et fonctionnel ?


Message édité par alexandre_j le 30-08-2011 à 08:43:00
Reply

Marsh Posté le 29-08-2011 à 19:41:09   

Reply

Marsh Posté le 29-08-2011 à 22:32:14    

Passe le nom de ta variable en string à la fonction ($varName), et dans la fonction fait un if ( isset(${$VarName}) )


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 29-08-2011 à 23:32:52    

Hum, un peu tard pour faire de la gymnastique de var :)
 
J'ai essayé ça comme ça :
 

Code :
  1. $entreprise = Doctrine_Core::getTable('Entreprise')->find($id);
  2. checkIsSet('entreprise');
  3. function checkIsSet($var) {
  4.     if (!isset(${$var})) {
  5.         include('./core/pagenf.php');
  6.         exit();
  7.     }
  8. }


 
Mais ça ne fonctionne pas. Dans ma fonction ${$var} est bien l'équivalent de $entreprise ?
Je réfléchis en répondant, mais la portée n'est plus bonne pour ma var $entreprise dans tous les cas non ?


Message édité par alexandre_j le 29-08-2011 à 23:33:37
Reply

Marsh Posté le 30-08-2011 à 01:04:34    

D'un côté il y a le check isset, de l'autre le check si la valeur est nulle.
 
Mais effectivement, c'est un problème de portée.
 
Une solution pourrait être de tenter un global ${$var}, mais n'utilisant jamais de variable globales dans mes codes, je n'en connais pas le comportement exact et j'ai peur que cela initialise ta variable, rendant de fait le isset() intra-fonction inopérant.
 
Une autre solution pourrait être de passer le résultat du isset en paramètre à ta fonction.
 
 
Dans le cadre de classes, il y a peut être moyen d'utiliser les méthodes magiques style __isset() et __unset().  
 
 
La solution la plus accessible à mon sens reste de toujours initialiser ta variable à null en premier lieu, et comme ça elle existe quoi qu'il se passe. Acceptable ou non suivant ce que tu tentes de réaliser.
 
 
A voir, donc.


Message édité par CyberDenix le 30-08-2011 à 01:08:08

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 30-08-2011 à 08:42:26    

Merci pour tes réponses.
Je vais opter pour le moins de code, donc pour le résultat du isset.
 
Merci !
 

Reply

Sujets relatifs:

Leave a Replay

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