Opérateur de contrôle d’erreur ou structure de contrôle

© Christian PAULUS. Document créé le 12 avril 2011 , mis à jour le 12 avril 2011.

On ne va jamais aussi loin que lorsqu'on ne sait pas où l'on va. Christophe Colomb

Accueil du site > Astuces > PHP > Opérateur de contrôle d’erreur ou structure de contrôle

Performance / PHP 5

La déclaration d’une constante nécessite l’emploi de la fonction define().

Lorsque cette constante existe déjà, PHP renvoie une erreur du style : Notice: Constant MY_CONSTANT already defined in ...

Pour éviter de recevoir cette erreur, plusieurs solutions :

  • Contrôler si la constante existe avant de la définir
  • Contrôler l’erreur et la rendre muette

Opérateur de contrôle d’erreur

Le signe « at », @, l’arobase, est l’opérateur de contrôle d’erreur en PHP.

Placer ce signe en début d’une fonction PHP permet d’omettre le message d’erreur éventuel.

Pire encore : placer cet opérateur en début d’une fonction qui n’existe pas ne vous alertera pas.

Le script de comparaison

En quelques lignes :

<?php

/**
 * Comparatif performance define
 *
 * 1/ via if defined()
 * 2/ en négligeant le message d'erreur,
 *    via l'opérateur de contrôle @
 *
 *
 * @author Christian Paulus <cpaulus at quesaco.org>
 * @license GPL
 * @version Tue Apr 12 10:49:48 CEST 2011
 * 
 */

$vide '';
$boucle 10000;
$br PHP_EOL;

define('MY_CONSTANT''une chaine de caractere');

// Utiliser la structure de contrôle
// if avec defined()
//
// if(defined())
//
$start microtime(1);

for ( 
$ii 0$ii $boucle$ii++ )
{
    
// si non définie, définir !
    
if (!defined('MY_CONSTANT'))
    {
        
define('MY_CONSTANT''une autre chaine');
    }
}
$result microtime(1) - $start;

echo (
'if() : '.$result.$br);

 
// Utiliser l'opérateur
// de contrôle d'erreur
// 
// @define()
//
$start microtime(1);

for ( 
$ii 0$ii $boucle$ii++ )
{
    
// définir, et ne pas
    // renvoyer d'erreur si déjà défini
    
@define('MY_CONSTANT''une autre chaine');
}
$result microtime(1) - $start;

echo (
'@    : '.$result.$br);

?>

Pour télécharger le script : comparatif_perf_define.php

Le résultat :

if() : 0.0056779384613037
@    : 0.025336980819702

L’usage de l’opérateur de contrôle d’erreur est donc de 4 à 5 fois plus lent qu’une simple structure de contrôle accompagnée de la fonction defined().

Juste pour quelques caractères de plus.

En savoir plus

Documents joints

Plussoyez !

Les forums sont fermés.