Page 1 sur 1

Raccourcir un if

Posté : 06 juil. 2006, 13:16
par kooma
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.

Posté : 07 juil. 2006, 12:39
par goeb
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

Posté : 07 juil. 2006, 22:44
par Truc
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))

Posté : 08 juil. 2006, 16:07
par Ryle
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..

Posté : 10 juil. 2006, 00:44
par kooma
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 !