©
. Document créé le 21 mars 2011 , mis à jour le 21 mars 2011.Il n'est point de secret que le temps ne révèle. Jean Racine
Accueil du site > Astuces > PHP > Comparer une chaîne vide. empty() ou les opérateurs ?
Vous désirez valider une chaîne de caractères vide dans une structure de contrôle.
Plusieurs possibilités :
Bien souvent, ce qui vient à l’idée naturellement est de comparer la variable de la chaîne à une chaîne. Du style :
if ($string == '')
Qu’apportent les deux fonctions empty() et strlen() ?
Un script qui permet de comparer les perfomances des différentes solutions :
<?php
Le script à télécharger :
$vide = '';
$boucle = 10000;
$br = PHP_EOL;
// en mode http, ajouter html
if (isset($_SERVER['HTTP_HOST'])) {
echo ('<pre>');
$br = '<br />'.$br;
}
// boolean
$start = microtime(1);
for($ii = 0, $err = ''; $ii < $boucle; ) {
if (!$vide) { $ii++; }
else { $err = 'comparaison invalide'; break; }
}
$result = microtime(1) - $start;
echo ('boolean : '.($err ? $err : $result).$br);
// operateur de comparaison
// test simple quote
$start = microtime(1);
for($ii = 0, $err = ''; $ii < $boucle; ) {
if ($vide == '') { $ii++; }
else { $err = 'comparaison invalide'; break; }
}
$result = microtime(1) - $start;
echo ('== squot : '.($err ? $err : $result).$br);
///////////////////////
// operateur de comparaison
// test double quote
$start = microtime(1);
for($ii = 0, $err = ''; $ii < $boucle; ) {
if ($vide == "") { $ii++; }
else { $err = 'comparaison invalide'; break; }
}
$result = microtime(1) - $start;
echo ('== dquot : '.($err ? $err : $result).$br);
///////////////////////
// operateur de comparaison
// type et double quote
$start = microtime(1);
for($ii = 0, $err = ''; $ii < $boucle; ) {
if ($vide === "") { $ii++; }
else { $err = 'comparaison invalide'; break; }
}
$result = microtime(1) - $start;
echo ('=== dquot: '.($err ? $err : $result).$br);
///////////////////////
// avec la fonction empty()
$start = microtime(1);
for($ii = 0, $err = ''; $ii < $boucle; ) {
if (empty($vide)) { $ii++; }
else { $err = 'comparaison invalide'; break; }
}
$result = microtime(1) - $start;
echo ('empty() : '.($err ? $err : $result).$br);
///////////////////////
// avec la fonction strlen()
$start = microtime(1);
for($ii = 0, $err = ''; $ii < $boucle; ) {
if (!strlen($vide)) { $ii++; }
else { $err = 'comparaison invalide'; break; }
}
$result = microtime(1) - $start;
echo ('strlen() : '.($err ? $err : $result).$br);
?>
Le résultat moyen sur quelques lancements :
boolean : 0.0013890266418457
== squot : 0.0013439655303955
== dquot : 0.0011301040649414
=== dquot: 0.00092196464538574
empty() : 0.0010190010070801
strlen() : 0.0029528141021729
Si la différence entre les premières méthodes n’est pas significatif, il paraît évident que strlen() est la moins appropriée.
Et si empty() donne sensiblement le même résultat que les opérateurs de comparaison, elle a l’avantage de clarifier le code.
Les forums sont fermés.