условие if и юзабилити

Marquis

Новичок
условие if и юзабилити

предположим есть условие:

если $mode == insert update listing то:
... действия ...

если $mode == delete то:
... действия ...

как правильно написать первое условие, т.е. сейчас выглядит следующим образом:
if ($mode == "insert" or $mode == "update" or $mode == "listing") {
... дейсвия ...
}

возможно ли это условие записать короче, т.к. кроме переменной $mode проверяется еще несколько переменных и запись получается не очень "понятной".

есть предположение что записать можно как:
if ($mode == ("insert"||"update"||"listing"))
но подозреваю что это не совсем правильно.
 

Wicked

Новичок
1) делать отдельный флаг:
$mode_iul = ($mode == "insert" or $mode == "update" or $mode == "listing");
$mode_d = ($mode == delete);

if ($mode_iul || ...) {
...
}

2) in_array($mode, array("insert", "update", "listing"))

3)
define (MODE_INSERT, 1);
define (MODE_UPDATE, 2);
define (MODE_LISTING, 4);
define (MODE_DELETE, 8);
$mode = (int)...;

if ($mode & (MODE_INSERT|MODE_UPDATE|MODE_LISTING))

вариантов вообще куча :)

-~{}~ 08.07.06 17:05:

ПС: а причем тут юзабилити? :)
 

Marquis

Новичок
Wicked
спасибо.

ПС: а причем тут юзабилити?
делается это для улучшения читаемости кода, т.к. функциональность кода не изменяется. Вот и подумал что тему будет лучше подписать как "юзабилити". Я не прав? :)
 

facelift

Новичок
PHP:
<?
$mode = 'update';
switch($mode) {
	case 'insert':case 'update': case 'listing':
		echo 'insert or update or listing';
		break;
	case 'delete':
		echo 'delete';
		break;
	default:
		echo 'bad mode';
		break;
}
?>
 

Marquis

Новичок
остановился на
PHP:
2) in_array($mode, array("insert", "update", "listing"))
думаю код стал более "прозрачным" с таким вариантом.

-~{}~ 08.07.06 14:12:

facelift
if OR switch . предпочитаю if
опять же это кому как удобнее имхо.
 

Фанат

oncle terrible
Команда форума
а мне всегда хватает реквест метода...

-~{}~ 08.07.06 14:17:

facelift
за идиотские вопросы - бан
 

Wicked

Новичок
Фанат
"реквест метода" ?

-~{}~ 08.07.06 17:20:

function in ($needle) {
$args = func_get_args();
unset($args[0]);
return in_array($needle, $args);
}
if (in($mode, "insert", "update", "listing"))

тока врядли читаемости добавит :)
 

Фанат

oncle terrible
Команда форума
ну, я слабо представляю, что может быть общего у инсерта с листингом.
а у инсерта, апдейта и делита - представляю. реквест метод
 

Marquis

Новичок
Фанат
типо так:
PHP:
if ($_SERVER['REQUEST_METHOD'] == "GET" and in_array($mode, array("insert", "update", "delete")))
?
ps. переменная $mode определена в начале скрипта.
 

Фанат

oncle terrible
Команда форума
переменная $mode определена в начале скрипта.
зачем?
вообще, я считаю, что такая переменная вообще не нужна.
для делита, разве что
и то, если делат ь удаление по уму - то есть, пометкой, а не делитом, то оно сведётся к тому же апдейту

-~{}~ 08.07.06 14:27:

чтобы продолжать разговор, нужно знать, что происходит в этих модах
лично я не представляю себе такого кода, при котором могло бы быть истинным условие, которое ты привёл
 

Marquis

Новичок
хмм. примерно так:
PHP:
if ($mode == "insert") {
 echo "принтуем форму для добавления записи";
 exit;
}

if ($mode == "update") {
 sql "запрос"
 echo "принтуем форму для редактирования записи";
 exit;
}

echo "принтуем список всех записей";
-~{}~ 08.07.06 14:39:

а условие
PHP:
if ($_SERVER['REQUEST_METHOD'] == "GET" and in_array($mode, array("insert", "update", "delete")))
только как дополнительный маркер указывающий на блок добавления/изменения/принта списка.

-~{}~ 08.07.06 14:41:

вообщем косячок в моем последнем коде заметен с переменными, просто выдирать сейчас всю изначальную структуру работы скрипта было бы проблематично.

-~{}~ 08.07.06 14:52:

в скрипте из 428 строк реально функционального кода около десятка это "избыточный код", так сказать дополнительные маркеры которые служат только для того, что бы понять откуда вообще в скрипте растут ноги.
Мне так удобно, следовательно кодеры пишут структуры как мне удобно, что бы я мог в любой момент добавить дополнительную функциональность.
 

Фанат

oncle terrible
Команда форума
if ($mode == "insert") {
echo "принтуем форму для добавления записи";
exit;
}

if ($mode == "update") {
sql "запрос"
echo "принтуем форму для редактирования записи";
exit;
}
тебе не кажется, что этот код несколько избыточен?

а условие
if ($_SERVER['REQUEST_METHOD'] == "GET" and in_array($mode, array("insert", "update", "delete")))
только как дополнительный маркер указывающий на блок добавления/изменения/принта списка.
странный блок.
на мой взгляд, принт - это одно, а изменение/добавление - это совсем другое.

-~{}~ 08.07.06 15:13:

if ($mode == "insert") {
if ($mode == "update") {
я, кстати, обхожусь вообще без этой переменной. lkz njuj? чтобы отличить инсерт от апдейта и листинга достаточно переменной $id
 

Marquis

Новичок
если я правельно понял, то
при инсерте и листинге переменная $id не определена.
какой функционал выполнять?
у меня "первичная" переменная это mode а id это как дополнительное необходимое требование для некоторого функционала, например update.

ps. могу и заблуждаться. :)
 

Фанат

oncle terrible
Команда форума
а я просто люблю избавляться от лишних переменных.

у меня при инсерте переменная $id определена.
по её наличию идёт выбор - рисовать форму или список
 

0xHH

Новичок
Непонятно, зачем один скрипт должен выполнять несколько различный действий. $mode вообще не должен быть. Одним скриптом должно отрабатывться только одно условие. Соответсвенно дизайн нужно изменить соответствующим образом.
 

Фанат

oncle terrible
Команда форума
если каждое действие - 5 строк, то городить по скрипту на каждое - только геморрой наживать.

тем более, что это всё одно "действие" - работа с базой.
 

0xHH

Новичок
Фанат
Я не знаю, как автор топика строит свой проект.
Если он подаёт линки в виде action=index.php?mode=insert или как action=insert.php. Это другое. Сваливать всё в одну кучу- имхо некорректно. Особенно порожает в WinApi wndproc, когда 1 функция- 5-10 машинописных страниц с деревом if-ов и case-ов. Не зря же придумали windowsx.h, когда на каждый case свой #define. Также и в php, нельзя все яйца бросать в кучу. Это становится нечитабельным. ИМХО.
 

Фанат

oncle terrible
Команда форума
при чём здесь индекс?
видно же, что у него модуль, который работает с одной таблицей.
с чего ты решил, что это у него здесь целиком сайт?

возьмём, к примеру, скрипт администрирования новостей
всего кода - строчек писят.
ну и куда их делить ещё?
 
Сверху