Bonjour,
Tout est dans le titre.
Existe-t-il une différence au niveau de la priorité, des performances ou autre entre ces deux opérateurs ?
Merci.Code:
1
2
3
4
5 if (!isset($var)) ou if (isset($var) == FALSE)
Version imprimable
Bonjour,
Tout est dans le titre.
Existe-t-il une différence au niveau de la priorité, des performances ou autre entre ces deux opérateurs ?
Merci.Code:
1
2
3
4
5 if (!isset($var)) ou if (isset($var) == FALSE)
AUCUNE ta condition reste la même
Salut,
Ici oui, mais ce n'est pas toujours vrai car NULL et 0 sont égaux à FALSE.
Avec cette question je souhaite m'attarder sur les performances (la logique algorithmique nous la connaissons).
Voici une remarque intéressante que j'ai eu :
Merci.Citation:
Envoyé par FloBaoti
D'un point de vue algorithmique, je suis persuadé que c'est identique, les compilateurs / interpréteurs étant à mon avis suffisamment smart pour modifier l'enchainement "Not - Jump If Equal" en "Jump if not equal".
Quand bien même, le Not est une opération tellement rapide que je doute que tu puisses mesurer une différence (autre que théorique)
Alors pour répondre dorian53, effectivement il existe une différence, même si ca n'est pas flagrant;
Le ! exprime effectivement le NOT, c'est a dire la négation et par delà l'inverse d'un de ce qui suit. Ainsi !(TRUE)=FALSE
Juste pour l'historique, ou pourun complément d'information, on appelle cela des "tables logiques", et sont très utilisées en éléctronique (quoi d'étonnant, l'ordinateur n'est qu'un gros circuit ^^). Dans ces fameuses "tables logiques" tu pourras retrouver également les fonction AND (&&), OR(||), et d'autres comme le XOR, NOR, NAND, etc ...
Je vais pas trop détailler puisqu'en plus ca n'est pas la question.
Et bien en fait ca m'a intrigué et j'ai fais le test que tu peux refaire chez toi:Citation:
Envoyé par dorian53
En le lancant plusieurs fois et en comparant les 2 resultats, on voit que la deuxieme solution est quand meme la plus rapide en execution.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?php $debut1 = microtime(); if (!isset($var)) { } $fin1 = microtime(); $result1 = $fin1-$debut1; echo 'Premier: '.$result1.'<br/>'; $debut2 = microtime(); if (isset($var) == FALSE) { } $fin2 = microtime(); $result2 = $fin2-$debut2; echo 'Deuxieme: '.$result2.'<br/>'; if($result1<$result2){ echo '1er'; } elseif($result1>$result2){ echo '2eme'; } else{ echo 'egalité'; } ?>
Voila voila
Quelques résultats du script de test:
Premier: 1.6000000000016E-005
Deuxieme: 8.000000000008E-006
2eme
Premier: 1.6000000000016E-005
Deuxieme: 9.0000000000368E-006
2eme
Premier: 1.4999999999987E-005
Deuxieme: 7.9999999999525E-006
2eme
Au risque de dire une connerie, ton test se base sur un appel (trois fois ok mais un test a chaque fois) alors que ce qui prend le plus de temps dans tout ca c'est surement l'appel à microtime()
je l'ai fait avec deux boucles qui tournent 1 million de fois et les temps oscillent entre 0.5 et 1.5 secondes pour réaliser 1 million de comparaison. Le !isset() est donc parfois plus lent que isset()==false et parfois plus rapide ce qui rejoint ce que disait Cold Hand.
Au niveau code exécuté sur la machine je pense vraiment que le code assembleur derrière est exactement le meme dans les deux cas.
Vérification faite en C#, je confirme :Citation:
Envoyé par koopajah
Donc, c'est identique :)Code:
1
2
3
4
5
6
7
8
9
10
11
12 if(!myBoolean==false){ // Code assembleur du test // 0000000e test esi,esi // 00000010 jne 00000012 } if(myBoolean==false){ // Code assembleur du test // 00000012 test esi,esi // 00000014 jne 00000016 }