La grande question… Qu’elle est la méthode la plus rapide pour faire du conditionnel en php. Le test suivant parle de lui même, pour des switch et if simples (avec une seule condition) :
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
/** * Test for simple switch **/ $switch_start = microtime(); switch ($_GET) { case 'value 1': # code ... break; case 'value 2': # code ... break; case 'value 3': # code ... break; case 'value 4': # code ... break; case 'value 5': # code ... break; case 'value 6': # code ... break; case 'value 7': # code ... break; default: # code ... break; } $switch_end = microtime(); $switch_time = $switch_end - $switch_start; $switch_time = array_sum( explode( ' ' , $switch_time ) ); /** * Test for simple IF **/ $if_start = microtime(); if ($_GET == 'value 1') { # code... } elseif ($_GET == 'value 2') { # code... } elseif ($_GET == 'value 3') { # code... } elseif ($_GET == 'value 4') { # code... } elseif ($_GET == 'value 5') { # code... } elseif ($_GET == 'value 6') { # code... } elseif ($_GET == 'value 7') { # code... } else { # code... } $if_end = microtime(); $if_time = $if_end - $if_start; $if_time = array_sum( explode( ' ' , $if_time ) ); /** * Display results **/ echo "<pre>"; echo "Switch result =t" . number_format($switch_time, 20) . " sec n"; echo "If result =t" . number_format($if_time, 20) . " sec n"; echo "</pre>"; |
Voici quelques résultats :
1 2 3 4 5 6 7 8 |
Switch result = 0.00000999999999995450 sec If result = 0.00000300000000008630 sec Switch result = 0.00001000000000006600 sec If result = 0.00000300000000008630 sec Switch result = 0.00000900000000003680 sec If result = 0.00000300000000008630 sec |
Cas particulier du Switch (voir la suite)
Par contre, la syntaxe du switch peut-être plutôt sympa et hyper lisible dans le cas où nous voudrions exécuter le même code pour $_GET[‘value_1’] $_GET[‘value_2’]… et un différent pour $_GET[‘value_5’] $_GET[‘value_6’] $_GET[‘value_7’] tout en gardant le ‘default’ même si les résultats en if et switch ne changent pas…
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/** * Test for simple switch **/ $switch_start = microtime(); switch ($_GET) { case 'value_1': case 'value_2': case 'value_3': case 'value_4': # statement 1, 2, 3 and 4 break; case 'value_5': case 'value_6': case 'value_7': # statement for 5, 6 and 7 break; default: # Default statement break; } $switch_end = microtime(); $switch_time = $switch_end - $switch_start; $switch_time = array_sum( explode( ' ' , $switch_time ) ); /** * Test for simple IF **/ $if_start = microtime(); if ($_GET == 'value_1' || 'value_2' || 'value_3' || 'value_4') { # statement 1, 2, 3 and 4 } elseif ($_GET == 'value_5' || $_GET == 'value_6' || $_GET == 'value_7') { # statement for 5, 6 and 7 } else { # Default statement } $if_end = microtime(); $if_time = $if_end - $if_start; $if_time = array_sum( explode( ' ' , $if_time ) ); /** * Display results **/ echo "<pre>"; echo "Switch result =t" . number_format($switch_time, 20) . " sec n"; echo "If result =t" . number_format($if_time, 20) . " sec n"; echo "</pre>"; |
Ps : Ne copiez pas ce code bêtement, j’aime les pièges ;)