Raccourcir un if

kooma
Invité n'ayant pas de compte PHPfrance

06 juil. 2006, 13:16

Bonjour à tous,
je suis en train d'écrire un script php, et voici que je me retrouve avec des if volumineux de ce type:

if (((sizeof($this->Proprietes))||(sizeof($this->Etrangeres)))&&(sizeof($this->Reference))){

ou bien

if (($Assoc['Card']=="0,1"||$Assoc['Card']=="1,1"))

J'aimerais bien trouver un moyen de les écrire plus simplement du genre:
if ($Assoc['Card']=="0,1"OU"1,1")

Merci.

Eléphant du PHP | 413 Messages

07 juil. 2006, 12:39

salut,

voici un exemple pour éclaircir le code :
if ( ( sizeof($this->Proprietes) || sizeof($this->Etrangeres) ) &&
     sizeof($this->Reference) ){ 
$a = $Assoc['Card'];
if ( $a=="0,1" || $a=="1,1" ) // 0,1 ou 1,1
--
Goeb

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

07 juil. 2006, 22:44

Pour le 1er test il n'y a pas vraiment de raccourci possible hormis l'affectation des résultats de sizeof avant test:
s1=sizeof($this->Proprietes);
s2=sizeof($this->Proprietes);
s3=sizeof($this->Proprietes);

if ( ( s1 || s2 ) && s3 )
le 2ème test peut se faire avec un tableau:
$t=array("0,1","1,1");
$a = $Assoc['Card'];
if(in_array($a,$t))

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 juil. 2006, 16:07

Personnellement je te recommenderais même de les compliquer d'avantage... en effet, considérer la taille d'une chaine comme un booléen n'est pas ce qu'il y a de plus propre à mon avis. Cela fonctionne en php qui interprête le 0 comme un false et tout le reste comme true, mais ce n'est pas très rigoureux.
Tu peux par contre alléger un peu au niveau parenthèses, chaque condition n'a pas besoin d'en être entouré, elles ne servent qu'à regrouper les OU.

Je le redigerais personnellement comme ceci (en jouant sur l'indantation pour faciliter la lecture)
if ( sizeof($this->Reference) 
     && ( sizeof($this->Proprietes)!=0 || sizeof($this->Etrangeres)=!0 )
) 
Pour le second, comme Truc, je te recommande le tableau, mais s'il y en a plus de 2 ou 3. Si tu n'as que deux tests à faire autant les écrire directement, cela reste plus rapide à comprendre que de devoir rechercher le tableau auquel on se refère..

kooma
Invité n'ayant pas de compte PHPfrance

10 juil. 2006, 00:44

Merci pour l'idée des tableaux je n'y avais pas pensé.
Pour ce qui est du sizeof, je suis d'accord mais c'est pour l'instant une écriture temporaire, on est deux sur le code et nous le repasserons pour le rendre plus rigoureux une fois que nous aurons vu si notre projet peut, ou pas, fonctionner :D .
Et pour les parentheses trop nombreuses du if, je suis on ne peut plus d'accord et je vais corriger ça des maintenant !