Всем доброго времени суток! Вопрос может быть глупый, и возможно уже задавался на этом форуме… (если да то прошу прощения!)… Ну рас уж я начал, то осмелюсь спросить… так чем же всё таки лучше пользоваться, if else или switch case, и действительно ли это глупо:? Я имею в веду, стоит ли задумываться над тем сколько времени затратит сервер на выполнение этих операций:?
Sergey89 Спасибо за доклад, будет время я обзательно с ним ознакомлюсь! LoL Не ну то что нужно задумываться о времени обработки скрипта я и так понимаю, но тут я имел в веду именно эти два оператора, то есть, по времени обработки они похожи или один из них быстрее:?
Во... У меня вопрос по почти похожей теме =) Сорь, просто, чтобы новую не создавать... У меня есть выбор именно из 2х вариантов: 1. На хостинге есть подключение к БД. Мне надо подключиться к другой базе на другом компе и потом естественно обратно на начальную БД. С БД, что на другом компе, надо достать некоторые данные. 2. С помощью функции file_get_contents() получить данные с файла, который находится на другом компе. Этот файл соответственно там подключается локально к БД и возвращает некоторые данные. Так вот... Что из этого будет быстрее?
OdieZlo Конструкция if..else должна быть быстрее, хотя бы потому, что она базовая и простая. А switch был введён позже, т.к. конструкция if иногда становится неэффективной и => switch сложнее. Вот такие у меня выводы :-D
Нету исследовательского интереса) По быстрому протестил, каждый тест это 10 If или 10 case. прогон 100к раз, для вычисление среднего времени 10 тестов. Результат: Код (Text): Avarege If: 0.267175722122 sec Avarege switch: 0.552626991272 sec
PHP: <?php $s = microtime(true); for ($i = 0; $i < 100000; $i++) { test_if($i); } printf('if: %.5f<br />', microtime(true) - $s); $s = microtime(true); for ($i = 0; $i < 100000; $i++) { test_switch($i); } printf('switch: %.5f', microtime(true) - $s); function test_if($x) { $y = 0; if ($x == 1) { $y = $x * 1; } elseif ($x == 2) { $y = $x * 2; } elseif ($x == 3) { $y = $x * 3; } elseif ($x == 4) { $y = $x * 4; } elseif ($x == 5) { $y = $x * 5; } elseif ($x == 6) { $y = $x * 6; } elseif ($x == 7) { $y = $x * 7; } elseif ($x == 8) { $y = $x * 8; } elseif ($x == 9) { $y = $x * 9; } elseif ($x == 10) { $y = $x * 10; } else { $y = $x * $x; } return $y; } function test_switch($x) { $y = 0; switch ($x) { case 1: $y = $x * 1; break; case 2: $y = $x * 2; break; case 3: $y = $x * 3; break; case 4: $y = $x * 4; break; case 5: $y = $x * 5; break; case 6: $y = $x * 6; break; case 7: $y = $x * 7; break; case 8: $y = $x * 8; break; case 9: $y = $x * 9; break; case 10: $y = $x * 10; break; default: $y = $x * $x; } return $y; }
вроде они оба хорошы и спора не может быть ! где - то легче switch использовать чем if else и наоборот
Табличный метод не только лаконичней но и работает быстрее: PHP: <? $s = microtime(true); for ($i = 0; $i < 100000; $i++) { test_if(($i % 12)+1); } printf('if: %.5f<br />', microtime(true) - $s); $s = microtime(true); for ($i = 0; $i < 100000; $i++) { test_switch(($i % 12)+1); } printf('switch: %.5f<br />', microtime(true) - $s); $s = microtime(true); for ($i = 0; $i < 100000; $i++) { test_table(($i % 12)+1); } printf('table: %.5f<br />', microtime(true) - $s); function test_if($x) { $y = 0; if ($x == 1) { $y = 'Январь'; } elseif ($x == 2) { $y = 'Февраль'; } elseif ($x == 3) { $y = 'Март'; } elseif ($x == 4) { $y = 'Апрель'; } elseif ($x == 5) { $y = 'Май'; } elseif ($x == 6) { $y = 'Июнь'; } elseif ($x == 7) { $y = 'Июль'; } elseif ($x == 8) { $y = 'Август'; } elseif ($x == 9) { $y = 'Сентябрь'; } elseif ($x == 10) { $y = 'Октябрь'; } elseif ($x == 11) { $y = 'Ноябрь'; } elseif ($x == 12) { $y = 'Декабрь'; } else { $y = false; } return $y; } function test_switch($x) { $y = 0; switch ($x) { case 1: $y = 'Январь'; break; case 2: $y = 'Февраль'; break; case 3: $y = 'Март'; break; case 4: $y = 'Апрель'; break; case 5: $y = 'Май'; break; case 6: $y = 'Июнь'; break; case 7: $y = 'Июль'; break; case 8: $y = 'Август'; break; case 9: $y = 'Сентябрь'; break; case 10: $y = 'Октябрь'; break; case 11: $y = 'Ноябрь'; break; case 12: $y = 'Декабрь'; break; default: $y = false; } return $y; } function test_table($x) { static $table = array(false, 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'); if (isset($table[$x])) return $table[$x]; return false; }
Дедушка Кнут отдыхает - табличный метод рулит. зы Вам пора писать трехтомник (толстый) или диссертацию на тему - "преимущества табличного метода обработки информации". зы Смешно.
флоппик Кстати не соглашусь,я часто читая топики где как ты говоришь доказывают что то баранам,нахожу полезную для себя информацию Неудобно копытами печатать... Ti Интересный подход, но на практике редко где получаеться использовать.Цель множественых ифов и свитча,это выполнить разные действия в зависимости от условий.
Во многих реалтаймовых приложениях, где идут интенсивные мат. расчеты, синусы - косинусы и прочие функции для производительности ВСЕГДА считаются табличным методом. Во флеш играх, часто.
То есть для первого варианта табличный метод должен выглядеть так? PHP: <?php function test_table($x) { $table = array(false, $x, $x*2, $x*3, $x*4, $x*5, $x*6, $x*7, $x*8, $x*9, $x*10); if (isset($table[$x])) return $table[$x]; return false; } ?> Если так, то это далеко не быстрее...
Универсальное решение только одно - пользоватся мозгом. Естественно умножение будет быстрее выполнятся просто так.