Page 1 sur 1

Conditions similaires

Posté : 24 févr. 2010, 18:50
par Dr@ke
Bonjour, il y a t-il un moyen de simplifier plusieurs conditions similaires au lieu d'une répétition de mêmes tests sur différentes variables?

Je m'explique, exemple:
if (test($variable1) && test($variable2) && test($variable3))
    echo 'Test réussis';
La fonction test() ici étant la même pour les 3 conditions.
Le but serait de faire un seul et même test pour les 3 variables.
Le but aussi est de simplifier et non de compliquer le code.
Donc l'idée d'utiliser un tableau dans ce cas précis, ne me parait pas intéressante.

Merci, par avance

Re: Conditions similaires

Posté : 24 févr. 2010, 18:56
par stealth35
tu pourrais faire un "eval" sur une chaine dynamique (mais perso je suis pas fan du eval)

EDIT: après ca dépend comment son tes données, ce genre de chose se ferais plus avec un tableau et apres genre array_(map|walk|filter) avec ta fonction en paramètre, suffirais de faire ta comparaison

Re: Conditions similaires

Posté : 24 févr. 2010, 19:52
par Calimero
Hello,

Et pourquoi pas...
if (test($variable1,$variable2,$variable3))
    echo 'Test réussis';
Après, dans ta fonction test(), func_get_args() pour boucler sur les N paramètres, un && en fin de boucle sur les résultats (si >1) et le tour serait joué...

Re: Conditions similaires

Posté : 25 févr. 2010, 00:37
par Dr@ke
J'avais cru voir une syntaxe s'approchant de ton exemple Calimero, mais n'utilisant aucune boucle...
J'ai dû rêver.
Sinon oui c'est une bonne idée, sauf que je n'ai pas été assez précis, la fonction n'est pas une fonction personnelle mais c'est la fonction empty().
Au pire je vais utiliser un tableau, car 3 tests à la suite (empty()) ça gêne mon oeil :wink:

Re: Conditions similaires

Posté : 25 févr. 2010, 00:52
par AB
J'avais cru voir une syntaxe s'approchant de ton exemple Calimero, mais n'utilisant aucune boucle...
J'ai dû rêver.
Sinon oui c'est une bonne idée, sauf que je n'ai pas été assez précis, la fonction n'est pas une fonction personnelle mais c'est la fonction empty().
Au pire je vais utiliser un tableau, car 3 tests à la suite (empty()) ça gêne mon oeil :wink:
Oui enfin même si ca gêne ton oeil, faire un tableau pour vérifier trois variables avec empty ça sera juste plus verbeux (donc tout autant gênant pour les yeux) et accessoirement moins performant.

D'un autre côté ça m'amuse assez, je vois que je ne suis pas le seul frustré de ne pas pouvoir faire empty($var1,$var2,$var3) alors qu'on peut le faire avec isset :lol:

Re: Conditions similaires

Posté : 25 févr. 2010, 00:56
par Dr@ke
Voila, t'as tout compris :wink:
Puis voila aussi, c'était avec isset() que l'on pouvait le faire, je me disais bien que javais vue ça quelque part.

Re: Conditions similaires

Posté : 25 févr. 2010, 01:00
par Calimero
J'avais cru voir une syntaxe s'approchant de ton exemple Calimero, mais n'utilisant aucune boucle...
J'ai dû rêver.
La boucle étant interne à la fonction, pour moi elle est "cachée" de ton source principal. N'était-ce pas l'objectif ?

Si tu es allergique aux boucles (je sais pas trop pourquoi, mais admettons :lol: ) ça pourrait aussi se faire avec un switch à la place de la boucle... :) (et peut-être encore d'autres astuces auxquelles je ne pense même pas).

Mais c'est, à mon goût, pas plus court ni plus joli, et ça impose un maximum de paramètres dans ta fonction (celui que tu auras daigné traiter dans le switch)... Mais bon, pourquoi pas :|

Il doit y avoir des exemples pertinents dans la page de manuel de func_get_args().

Re: Conditions similaires

Posté : 25 févr. 2010, 01:12
par Dr@ke
Oui t'as raison:
function multi_empty() {
    foreach(func_get_args() as $args) {
        if (empty($args)) {
            return true;
            break;
        }
    }
    return false;
}
Bien joué, merci, ca fonctionne nickel :wink:

Re: Conditions similaires

Posté : 25 févr. 2010, 01:58
par AB
Oui t'as raison:
function multi_empty() {
    foreach(func_get_args() as $args) {
        if (empty($args)) {
            return true;
            break;
        }
    }
    return false;
}
Bien joué, merci, ca fonctionne nickel :wink:
Heu ... c'est pas un peu vite dit, "nickel" ? Si tu passes en argument une variable qui n'est pas définie tu vas te prendre une "Notice: Undefined variable", ce qui est moyennement rigoureux.

Par ailleurs le fonctionnement n'est pas identique à if(isset($var1,$var2, $var3)) qui équivaut à if(isset($var1) && isset($var2) && isset($var2)) alors que ta fonction if(multi_empty($var1,$var2,$var3)) équivaut à if(empty($var1) || empty($var2) || empty($var3))
... mais c'est peut être ce que tu souhaites.

Re: Conditions similaires

Posté : 25 févr. 2010, 03:04
par Dr@ke
http://palacesec.freehostia.com/php-mail.html

j'initialise les variables avant, elles peuvent ensuite être null, mais le nul aura été défini avant.
Il est vrai que la fonction seule empty() ne renvoie pas d'erreur Notice en cas de variable non définie.
Mais dès que l'on utilise d'autres fonctions, il est disons primordiale de définir ces variables.
Ce point est disons plutôt commun.


Ensuite je fais:
if (!m_empty($nom, $sujet, $message))
Le false étant possible si et seulement si les 3 variables sont false sinon le break stop la boucle et retourne true.

Ensuite, j'ai fais les tests pour être certain , avec des variables null et vides -> c'est pour ceci que je disais que c'était nickel pour ce que je voulais faire.

Sinon, ta remarque est pertinente pour ceux qui voudraient l'utiliser :wink:

Re: Conditions similaires

Posté : 25 févr. 2010, 05:22
par AB
Ah ok, utilisée comme tu l'utilise, je comprend mieux l'intérêt de ta fonction :)

Cela dit c'est vraiment spécifique et à n'utiliser que dans ce contexte particulier, sinon se souvenir que sur plusieurs variables if(!m_empty($nom, $sujet, $message)) n'est pas strictement l'inverse de if(m_empty($nom, $sujet, $message)). Donc take care, comme ils disent... (les anglais) :)