- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
// set admin mode
switch (true) {
case $nc_core->inside_admin:
$nc_core->admin_mode = true;
break;
case !$passed_thru_404 && isset($posting): // add (edit) action
$nc_core->admin_mode = $admin_mode;
break;
case !$passed_thru_404: //front-office
$nc_core->admin_mode = true;
break;
case $passed_thru_404:
$nc_core->admin_mode = false;
break;
default:
$nc_core->admin_mode = false;
}
Lure Of Chaos 26.05.2010 13:09 # −1
интересно откуда там этот $admin_mode береца?
telnet 26.05.2010 13:21 # 0
Lure Of Chaos 26.05.2010 15:00 # +1
guest 26.05.2010 14:44 # +1
В PHP программировании (в отличии от структурного) принято все переменные делать глобальными
Lure Of Chaos 26.05.2010 15:01 # +1
telnet 26.05.2010 15:32 # 0
Vasiliy 26.05.2010 13:16 # −1
С одной стороны дурь и блаж с другой очень тонкое использование особенностей языка на других (с которыми я сталкивался) в подобных конструкциях для выбора ветвеления используется только константа и не вкоем случае не строка. А тут однин свич запихали несколько условий. Единственное что мне прямати расмешило это
case $nc_core->inside_admin:
$nc_core->admin_mode = true; три раза код пречитывал так смысл и не увидел.
Остальное хоть как то можно объяснить
Хотя тут же зная особности языка можно использовать что вроде if (z) x=b=c=true; else a=b=false;
Как то так ну может я и ошибаюсь
guest 29.05.2010 20:02 # 0
А присваивание выполняется видимо для явного приведения типа.
3.14159265 26.05.2010 14:03 # +1
таких жестоких свитчей на говнокоде я еще не видел
telnet 26.05.2010 14:08 # 0
guest 26.05.2010 14:20 # −1
Vasiliy 28.05.2010 09:51 # −2
3.14159265 26.05.2010 15:44 # +2
break; case ()
единственное толковое применение switch(true) - это когда некоторые break - отсутствуют - иногда это может оказатся полезным.
Lure Of Chaos 26.05.2010 15:48 # −2
xXx_totalwar 26.05.2010 16:14 # +1
по кодогенерации тысячи манов - кури на здоровье.
Lure Of Chaos 26.05.2010 16:27 # 0
xXx_totalwar 26.05.2010 16:29 # 0
думаешь, ритчи от нех делать такой синтаксис использовал?
у тебя есть уникальная возможность создать свой язык с блекджеком и 'правильным' switch
Lure Of Chaos 26.05.2010 16:46 # 0
D3NC0D3R 26.05.2010 16:48 # −1
turdman 26.05.2010 16:37 # +1
Так что убрать break'и можно только заменив switch на совершенно другую конструкцию (с нормальными блоками вместо case'ов, типа case of в erlang'е), но тогда ни о каких проваливающихся case'ах речи быть не может, и будет такая конструкция просто сахаром над if() else if () else ().
D3NC0D3R 26.05.2010 16:45 # 0
xXx_totalwar 26.05.2010 16:48 # +1
D3NC0D3R 26.05.2010 16:54 # 0
а тут просто ставится отрицание
на условии ставить ли goto endSwitch
и детекшн keyworda break заменяется на детект continue.
мне всегда казалось что компилеры писали, чтоб было удобнее кодить юзающему, а не наоборот
xXx_totalwar 26.05.2010 16:58 # +1
если хочется 'подсластить' if else if.. лучше новую конструкцию ввести (в руби именно такой case)
D3NC0D3R 26.05.2010 17:04 # 0
просто обычное отрицание
continue!=break
другое дело что все уже привыкли
xXx_totalwar 26.05.2010 17:07 # 0
я пока никого и не обвинял)
D3NC0D3R 26.05.2010 17:10 # 0
turdman 27.05.2010 16:23 # 0
Switch
case: -> метка, кода на своем месте при компиляции не дает
break -> goto в конец блока
Все просто как кувалда
Switch-без-break
case: -> метка, но компилируется в break, но только если перед ней нет continue
continue -> вообще ничего не делает, но влияет на компиляцию case
И это по вашему не говно-костыль?
Lure Of Chaos 27.05.2010 16:40 # −1
Lure Of Chaos 26.05.2010 16:49 # +1
Lure Of Chaos 26.05.2010 16:47 # 0
cheef 27.05.2010 12:19 # 0
на
А в каждом методе логика аналогична той, что в кейзах
Lure Of Chaos 27.05.2010 13:38 # 0
wwwguru 26.05.2010 14:32 # 0
UPD: это была первая мысль, @telnet сообщил что не работает. Поздравим неткат с этим.
Lure Of Chaos 26.05.2010 15:02 # 0
guest 26.05.2010 17:00 # −2
Lure Of Chaos 26.05.2010 17:37 # 0
guest 27.05.2010 20:46 # 0
Добавлять/изменять данные можно как с сайта, а можно в режиме редактирования.
Понятно, что если пользователь добавляет данные в режиме редактирования, то после операции он должен в этом режиме и остаться.
// если пользователь в админке - то он явно в режиме редактирования
case $nc_core->inside_admin:
$nc_core->admin_mode = true;
break;
// тут $admin_mode приходит из формы добавления (в post'e например )
case !$passed_thru_404 && isset($posting): // add (edit) action
$nc_core->admin_mode = $admin_mode;
break;
// через обработчик чпу запрос не проходил, значит пользователь зашел по адресу
мойсайт.ru/netcat/ - это режим редактирования
case !$passed_thru_404: //front-office
$nc_core->admin_mode = true;
// запрос прошел через обработчик чпу - показывается просто страница в обычном режиме
case $passed_thru_404:
$nc_core->admin_mode = false;
То есть любой авторизированный пользователь может переключиться на режим редактирования ( в скрипте тогда будет $admin_mode = 1 ), но это не значит, что он может все поудалять, у него не будет никаких на это прав:
http://netcat.ru/netcat/?catalogue=3&sub=422
telnet 27.05.2010 20:54 # 0
guest 27.05.2010 21:09 # 0
telnet 27.05.2010 21:03 # 0
guest 27.05.2010 21:10 # 0
guest 27.05.2010 21:28 # −4
Vasiliy 28.05.2010 09:55 # +1
guest 28.05.2010 10:00 # −2
telnet 28.05.2010 03:28 # 0
guest 28.05.2010 11:35 # −1
telnet 28.05.2010 11:47 # +2
guest 28.05.2010 14:00 # 0
Если не секрет, какие?:-) все, что находится в system/ ?
telnet 28.05.2010 14:39 # 0
guest 28.05.2010 15:01 # 0
Весь текст ужимается до "NetCat - УГ".
telnet 28.05.2010 15:03 # 0
guest 29.05.2010 20:23 # 0
вроде так))
telnet 29.05.2010 22:23 # 0
Проверять лень =3
guest 30.05.2010 17:40 # −2
guest 31.05.2010 10:34 # 0