©
. Document créé le 12 avril 2011 , mis à jour le 12 avril 2011.Un idiot pauvre est un idiot, un idiot riche est un riche. Paul Laffitte
Accueil du site > Astuces > PHP > Opérateur de contrôle d’erreur ou structure de contrôle
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 :
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.
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.
Les forums sont fermés.