- 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;
}
интересно откуда там этот $admin_mode береца?
В PHP программировании (в отличии от структурного) принято все переменные делать глобальными
С одной стороны дурь и блаж с другой очень тонкое использование особенностей языка на других (с которыми я сталкивался) в подобных конструкциях для выбора ветвеления используется только константа и не вкоем случае не строка. А тут однин свич запихали несколько условий. Единственное что мне прямати расмешило это
case $nc_core->inside_admin:
$nc_core->admin_mode = true; три раза код пречитывал так смысл и не увидел.
Остальное хоть как то можно объяснить
Хотя тут же зная особности языка можно использовать что вроде if (z) x=b=c=true; else a=b=false;
Как то так ну может я и ошибаюсь
А присваивание выполняется видимо для явного приведения типа.
таких жестоких свитчей на говнокоде я еще не видел
break; case ()
единственное толковое применение switch(true) - это когда некоторые break - отсутствуют - иногда это может оказатся полезным.
по кодогенерации тысячи манов - кури на здоровье.
думаешь, ритчи от нех делать такой синтаксис использовал?
у тебя есть уникальная возможность создать свой язык с блекджеком и 'правильным' switch
Так что убрать break'и можно только заменив switch на совершенно другую конструкцию (с нормальными блоками вместо case'ов, типа case of в erlang'е), но тогда ни о каких проваливающихся case'ах речи быть не может, и будет такая конструкция просто сахаром над if() else if () else ().
а тут просто ставится отрицание
на условии ставить ли goto endSwitch
и детекшн keyworda break заменяется на детект continue.
мне всегда казалось что компилеры писали, чтоб было удобнее кодить юзающему, а не наоборот
если хочется 'подсластить' if else if.. лучше новую конструкцию ввести (в руби именно такой case)
просто обычное отрицание
continue!=break
другое дело что все уже привыкли
я пока никого и не обвинял)
Switch
case: -> метка, кода на своем месте при компиляции не дает
break -> goto в конец блока
Все просто как кувалда
Switch-без-break
case: -> метка, но компилируется в break, но только если перед ней нет continue
continue -> вообще ничего не делает, но влияет на компиляцию case
И это по вашему не говно-костыль?
на
А в каждом методе логика аналогична той, что в кейзах
UPD: это была первая мысль, @telnet сообщил что не работает. Поздравим неткат с этим.
Добавлять/изменять данные можно как с сайта, а можно в режиме редактирования.
Понятно, что если пользователь добавляет данные в режиме редактирования, то после операции он должен в этом режиме и остаться.
// если пользователь в админке - то он явно в режиме редактирования
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
Если не секрет, какие?:-) все, что находится в system/ ?
Весь текст ужимается до "NetCat - УГ".
вроде так))
Проверять лень =3