if else VS switch case

1. chiper (22.05.2010 / 16:44)
Интересует что лучше использовать для одной цели. Создания 2х и более страниц в одном файле. Я например свитч кейс использую. Для меня удобнее. Но что технически лучше?
--------
Кстати сегодня узнал, что если не задать переменную страницы для топсервера то скрипт не будет работать...

2. shurik (22.05.2010 / 16:45)
я за if else
ЗЫ: на топсервере он будет работать, просто ошибка выходит что не найдена переменная, я же тебе сказал

3. Владислав (22.05.2010 / 16:59)
switch case

4. chiper (22.05.2010 / 17:03)
2. SHuRiК 59, ну это наверно такая тупая особенность сервера. Кстати можно этот баг исправить, правда надо будет писать часть кода в каждом файле где есть свитч кейс.

5. Lugaro (22.05.2010 / 17:34)
ChipеR_Nervous (Сегодня / 16:03)
2. SHuRiК 59, ну это наверно такая тупая особенность сервера. Кстати можно этот баг исправить, правда надо будет писать часть кода в каждом файле где есть свитч кейс.
Это не косяк сервера, просто включен полный рапорт по ошибкам, ошибка это не критическая, просто предупреждение про пустую переменную, помогает в процессе написания выявить почему же не работает скрипт как задумано а вот с регистр глобал on такие неопределенные переменные опасны, т.к их может установить кто то левый, лучше не выключать этот рапорт по всем ошибкам вон к примеру всякие модификации к мотору старых версий, включив полный рапорт можно найти много чего интересного
ЗЫ я за switch case

6. Lugaro (22.05.2010 / 17:50)
Кстати про неопределенные переменные, я вот тут косяк наблюдаю на бест хостере, когда кода много, такое ощущение что интерпретатор проглатывает строки, тупо пропускает её, даже если сделать там спецом ошибку не чего не случится, приходится файл пропускать через одну программу, которая выравнивает код, хотя у меня он и так нормально выглядит и после пропуска через программу особо не меняться, но это помогает, непонятно чем вызван этот косяк, вот тут бы и помог рапорт по всем ошибкам, я к чему веду, лучше на локалке не вырубать, сам же себе сократишь время поиска бага, такого типа баг, с первого взгляда найти тяжело с выключенным полным выводом ошибок

7. Дмитрий (22.05.2010 / 19:07)
для меня switch/case, удобнее, код лучше читаем чем масса ветвлений с if/else, но if/else выигрывает по производительности, хотя выигранная производительность не стоит дальнейшего гемора с разбором кода

8. ramzes (22.05.2010 / 20:02)
А у меня просто больше 3 максимум 4, итераций не бывает, по этому if, elseif, else предпочитаю, а так по моему без разницы, ну только при большо кол-ве вариантов свитч удобнее и читабельнее

9. Azzido (22.05.2010 / 22:21)
Разница в скорости есть, например пробовал скрипт вывода праздников, сначала через elseif затем 365 штук саse, свитч работает в среднем на 0,00005 быстрей, тестил на денвере,но такая экономия незначительна

10. ramzes (22.05.2010 / 22:31)
Да это и не экономия вовсе.. Так, пыль на танкеsmile
На такое кол-во условий такая разница просто не ощутима ни как и ни чемsmile
$day[$numday]; работает быстрее гг

11. Саня (22.05.2010 / 22:32)
делать вам больше нечего )) Хоть бы за дело тема, а так тока комариные письки меряем

12. ramzes (22.05.2010 / 22:52)
Гг можно еще print() и echo() сравнить,
хотя не, это уже сто раз было))
лучшее include() и require()

13. iNeeXT (22.05.2010 / 23:13)
switch

14. Lugaro (22.05.2010 / 23:19)
ramzes (Сегодня / 21:52)
Гг можно еще print() и echo() сравнить,
хотя не, это уже сто раз было))
лучшее include() и require()
require быстрееD а вобще что использовать зависит от случая, require производит подключение файлов сразу а уже потом выполняет код а вот с include интерпретатору при выполнении приходится переключатся на файл, так что для подключения всяких библиотек, шапок итд нужно использовать require он на порядок быстрее ну а для динамических подключений include

15. Славик (22.05.2010 / 23:19)
12. ramzes, они отличаюься тем что в инклуде если файла нет то ошибка некритическая. А в регуйре если его нету то скрипт остпнавливается с критическоц ошибкой)))) smile

16. Lugaro (22.05.2010 / 23:32)
Ихнее главное отличее в том что require подключает файлы до выполнения а include в процессе, а судить ихние различие по 15 посту, не верно

17. ramzes (23.05.2010 / 02:15)
Гг да я же шучу)) просто от балды пару похожих конструкций назвалsmile
я тоже require юзаю, и только по привычке. Без проверки на повторное подключение, оно просто не нужно

18. ramzes (23.05.2010 / 02:17)
3.Ы. Если не ошибаюсь автолоад быстрее т.к. без необходимости не подключает лишний код к странице (при условии большого объема кода)

19. Lugaro (23.05.2010 / 16:57)
18. ramzes, да по идее, да и удобней так, скинул всё в одну папку и не надо постоянно инклюды писать, жаль только что нет такого для функций или я ошибаюсь ? искал как-то и не находил не чего подобного

20. ramzes (23.05.2010 / 18:12)
В класс обьедини функцииsmile
я как то не замарачивался, все через один единственный файл всегда запускаю так что подключено сразу все необходимое))

21. KOZZ (23.05.2010 / 18:17)
18,что за автолоад??? просветите

22. Lugaro (23.05.2010 / 18:19)
20. ramzes, ну я тоже список самых важных функций в одном файле храню, это уже чисто так для удобства было бы не плохо с такой функцией

23. Lugaro (23.05.2010 / 18:21)
eGo_Nervous (Сегодня / 17:17)
18,что за автолоад??? просветите
function __autoload($class_name)
{
include_once $_SERVER['DOCUMENT_ROOT'] . '/путь к папке с классами/' . $class_name . '.php';
}
и при вызове какого-то класса его не нужно в ручную подключать, он автоматом будет грузится
ЗЫ название класса должно совпадать с именем фала

24. ramzes (23.05.2010 / 19:25)
Функция инициализируется автоматически, чем очень удобна, не требует вызова, служит для автоматического подключения классов, выгодна тем что подключает только те классы которые инициализированны в коде.
Где то примерно так. Ну это тем кто ооп предпочитает знакомоsmile
22, у меня обычно файл функций один и несколько файлов-классов, доведенных до состояния 'готовое ядро'.
Правда автолоад я все таки не использую, классов не так уж и много пока,
да и читал статью, суть выигрыша - объем обрабатываемого сервером кода,
а мы пока вроде больших фремворков не пишем ни кто вроде гг

25. DmitryDick (23.05.2010 / 21:32)
Автор, просто умей применять и думать, где нужны иф-эльсы, а где свитч.

26. Станислав (23.05.2010 / 21:50)
Ну, как я подозреваю, то для разделения на страницы в одном файле (хз как написать надо было, но вы меня поняли =)), то switch case правильней бы.
Но я всегда юзал if else. Привык к ним как-то =))))

27. chiper (23.05.2010 / 22:32)
25. dont give me names,да я знаю. Просто тут с одним знакомым спорилиsmile

28. smartvbxos7 (23.05.2010 / 23:59)
Кейсы рулят

29. Lugaro (08.06.2010 / 05:40)
24. ramzes, наткнулся опять на эту тему и решил отписать свое решение по динамическому подключению функций http://visavi.net/blog/blog.php?act=view&id=70&

30. ramzes (09.06.2010 / 13:30)
29, примерно к такому же пришел не так давноsmile правда чуть иначе, без использования класса, просто подключаю файлы если их ключей нет в массиве уже подключенных.
не столь изящно, но вполнеsmile

31. Studentsov (09.06.2010 / 13:43)
elseif быстрее. так как в PHP switch-case является лишь обёрткой elseif и собственной реализации не имеет

32. Nu3oN (09.06.2010 / 15:15)
Studentsov (Сегодня / 13:43)
elseif быстрее. так как в PHP switch-case является лишь обёрткой elseif и собственной реализации не имеет
Откуда такие познания? о_О впервый раз это слышу! if else и switch case являются конструкцией языка php и ничего общего на сколько я знаю они не имеют не считая предназначения

33. Studentsov (09.06.2010 / 16:15)
#32 Смотри исходники PHP

34. chiper (13.06.2010 / 00:22)
32. Nu3oN, да мне тоже кажется что она как бы независкт не от какой другой конструкцииsmile

35. Nu3oN (13.06.2010 / 00:36)
Studentsov (09.06.10 / 16:15)
#32 Смотри исходники PHP

Часто вместо нескольких расположенных подряд инструкций if-else целесообразно воспользоваться специальной конструкцией выбора switch-case. Данная конструкция предназначена для выбора действий, в зависимости от значения указанного выражения. Конструкция switch-case чем-то напоминает конструкцию if-else, который, по сути, является ее аналогом.


36. Nu3oN (13.06.2010 / 00:37)
Это максимум что я смог найти!
Нигде ничего не сказанно что
"switch-case является лишь обёрткой elseif"
Дай ка мне статейку где это написанно

37. Azzido (13.06.2010 / 00:40)
Ну по сути если подумать,свитч так же перебирает условия как elseif

38. Nu3oN (13.06.2010 / 00:47)
Azzido (Сегодня / 00:40)
Ну по сути если подумать,свитч так же перебирает условия как elseif

time() и $_SERVER['REQUEST_TIME']
тоже выводит время в юниксе, это ж не говорит о том что time() это оболочка глобального массива $_SERVER['REQUEST_TIME']
----
А вообще дело не в этом! просто интересно стало...

39. Studentsov (13.06.2010 / 01:14)
Я на хабре где-то в комментах читал. Там даже код на C был дан

40. Studentsov (13.06.2010 / 13:30)
#38 Кстати, ты не прав. Я тут почитал мануал, $_SERVER['REQUEST_TIME'] не меняет своё значение по ходу выполнения скрипта, даже если он секунд 10 выполняется. Значение переменной - время выполнения скрипта. Можешь такой скрипт запустить:
<?php
$s1 = $_SERVER['REQUEST_TIME'];
$t1 = time ();

for ($i = 0; $i < 9999999; ++$i) time(); //Может быть любая другая функция

echo ($s1 === $_SERVER['REQUEST_TIME']) ? 'Переменные равны' : 'Переменные не равны';
echo ($t1 === time ()) ? '| Переменные равны' : ' | Переменные не равны';

?>
Результат тебя расстроит: Переменные равны | Переменные не равны smile

URL: https://visavi.net/topics/9674