IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

try throw catch


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut try throw catch
    Bonjour,

    Ce n'est pas un problème de syntaxe ponctuel que je soumets mais + un souci de construction de mon module PHP qui est ponctué de TRY THROW CATCH... et à la limite, cela rend la lisibilité du code difficile...

    Voici un extrait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    	 	
    try
     {	// Verifier que le requête n'est pas vide ! 
       	// ----------------------------------------
           if( is_string($this->query) ) 
    	   try
    	  {	if( $this->result = mysql_query($this->query,$this->idConn[$this->id]) ) 
    		{	// On teste le type de requête 'select','show','explain','describe')
    							preg_match( '`SELECT|SHOW|DESCRIBE|EXPLAIN`i' , $this->query , $match );
    							try
    		 					{	switch( $match[0] )
    								{	case 'SELECT' 	:	$i = 0;
    				 										// On construit notre $resArray
    				 										while( $row = mysql_fetch_assoc($this->result) ) 
    														{	$resArray[$i++] = $row;
    				 										}	//end while
    									
    				 										// On libere la ressource
    														$this->mysqlFreeResult($this->result) ;
    														return($resArray) ;
    														break;
    													
    									case 'SHOW'		:	
    									case 'EXPLAIN'	:
    									case 'DESCRIBE'	:	// on informe juste que c'est bien passer
    			      										return true;
    									default			:	// On lance une exception  
    		      											throw new Exception("SQL didn't find correct keyord to match MYsql, please check it !") ;
    			  					}//end switch	
    			 				}  catch(Exception $E) 
    								{	$this->display_exception($E) ;
    								}
    						}				
    					else 
    						{	
    		 				} 
    			 	}  catchh(Exception $E) 
    		    		{	$this->display_exception($E) ;
    					}
    			else 
    				throw new Exception("SQL request string is empty and/or not valid, please check it !") ;
    		}   catch(Exception $E) 
    		    {	$this->display_exception($E) ;
    			}
    Code qui contient 3 X le trio (try, throw , catch).

    Alors je me pose la question suivante, une construction du style suivant est'elle possible et accepté par PHP autrement si vous en avez une autre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    try
    {	// Verifier que le requête n'est pas vide ! 
       	// ----------------------------------------
    	if( is_string($this->query) ) 
    		{	if( $this->result = mysql_query($this->query,$this->idConn[$this->id]) ) 
    				{	// On teste le type de requête ('select','show','explain','describe')
    					preg_match( '`SELECT|SHOW|DESCRIBE|EXPLAIN`i' , $this->query , $match );
    		 			{	switch( $match[0] )
    						{	case 'SELECT' 	:	$i = 0;
    				 								// On construit notre $resArray
    				 								while( $row = mysql_fetch_assoc($this->result) ) 
    												{	$resArray[$i++] = $row;
    				 								}	//end while
    									
    				 								// On libere la ressource
    												$this->mysqlFreeResult($this->result) ;
    												return($resArray) ;
    												break;
    													
    							case 'SHOW'		:	
    							case 'EXPLAIN'	:
    							case 'DESCRIBE'	:	// on informe juste que c'est bien passer
    			      								return true;
    							default			:	// On lance une exception  
    		      									throw new Exception("SQL didn't find correct keyord to match MYsql, please check it !") ;
    			  			}//end switch	
    				}				
    			else 
    				{	
    		 		} 
    		}  
    	else 
    		throw new Exception("SQL request string is empty and/or not valid, please check it !") ;
    }   catch(Exception $E) 
    	{	$this->display_exception($E) ;
    	}
    Construction dans laquelle je mets tout mon code entre une seul TRY - CATCH avec X THROW....

    Qu'est ce cela donne au point de vue performance ?

    Merci de votre feed-back

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Une indentation correcte du code t'aiderais à y voir clair , là c'est un peu du n'importe quoi.

    A un bloc try/catch correspond un test particulier et une exception particulière. Si tu as 3 try/catch c'est que tu à trois levée d'exception possible , tu ne devrais pas les remplacés par un seul. C'est cependant possible si les trois exception sont du même type.

    De même je trouve ça étrange de levée des exceptions dans un try alors que son but est justement de tester leur absence (ou non).

    Au nivea ude l'indentation il y'a deux standard soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if{
        //code
    } else {
        //code
    }
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if
    {
        //code
    } 
    else 
    {
        //code
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Indentation - Try Throw & Catch
    Au sujet de l'indentation, elle est due au copie/Collé sur le site et je en l'ai pas refaite.
    Mais on a chacun ces petites habitudse et la mienne diffère de celles que tu proposes mais pas de bcp....
    Au sujet du "Try Throw & Catch" je suis arrivé à une solution telle que je la proposais dans le forum, je ne sais si elle est valide pour un procédure ou un ensemble, moi j'ai l'ai faite pour une proc.

    Mais je me pose toujours des questions quant au performance car je suppose que cela bouffe des ressources, qui peut me dire ?

    A part cela tout va mieux sous le soleil, j'espère que tu en as aussi

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Mais je me pose toujours des questions quant au performance car je suppose que cela bouffe des ressources
    Un try/catch n'est pas consommateur de ressource. pas plus qu'une levée d'exception.
    Dans un cas tu exécutes ton code classiquement dans l'autre tu lance une exception et termine prématurément le script donc pas de souçis à avoir coté performance avec les exceptions.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. try {/* code */} catch (ex) { throw ex; }
    Par mioux dans le forum Débuter
    Réponses: 26
    Dernier message: 15/07/2011, 15h41
  2. [PHP 5.3] try - throw - catch
    Par ETVigan dans le forum Langage
    Réponses: 2
    Dernier message: 18/05/2010, 19h43
  3. [PHP 5.3] Exception throw catch try
    Par éric1 dans le forum Langage
    Réponses: 6
    Dernier message: 05/08/2009, 11h43
  4. UTILISATION DE TRY et CATCH
    Par demcoul dans le forum JBuilder
    Réponses: 1
    Dernier message: 15/04/2006, 15h01
  5. Pb : Exception / déroutements / try, throw, catch
    Par Bapt_from_Reims dans le forum C++
    Réponses: 5
    Dernier message: 18/03/2005, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo