Comparer une chaîne vide. empty() ou les opérateurs ?

© Christian PAULUS. Document créé le 21 mars 2011 , mis à jour le 21 mars 2011.

Quand un vieillard meurt, c'est une bibliothèque qui brûle. Diction africain

Accueil du site > Astuces > PHP > Comparer une chaîne vide. empty() ou les opérateurs ?

Optimisation / PHP 5

Vous désirez valider une chaîne de caractères vide dans une structure de contrôle.

Plusieurs possibilités :

  • utiliser un opérateur de comparaison
  • la fonction empty()
  • ou la fonction strlen()

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() ?

Script de test, comparaif empty() strlen()

Un script qui permet de comparer les perfomances des différentes solutions :

<?php

$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 script à télécharger :

Zip - 591 octets

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.

Plussoyez !

Les forums sont fermés.