![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
kanaris |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.2.2008 Репутация: -1 Всего: -1 |
22:44 18.07.2010
Разрабатываю систему, получается примерно такая структура:
Цикл выполняется бесконечно, пока не выполнит свою работу. Надо как-то сфабриковать участки "очень много кода". Есть такие варианты: 1) заключить в функции. Но есть недостатки - очень громоздкая функция получится + должно быть видно много переменных извне. 2) поместить их в отдельные файлы, и инклудить их каждый раз. Но возникает вопрос - если цикл выполняется долго, и каждый раз будет инклудиться файл, это наверное сильно скажется на производительности? 3) весь код будет в этом же файле - этот вариант использовать не хочу, т.к. сильно понизится понимаемость кода, файл получится как "Война и мир". Подскажите, что лучше выбрать, из первых двух либо предложите лучшее что нибудь ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
зависит от того, что именно происходит в "очень много кода": только ли вывод, обработка данных.
также стоит задуматься: зачем бесконечный цикл и куча if вместо одного switch(переменная-флаг $block может меняться в одной ветви, что заставит выполниться следующую ветвь без новой итерации цикла?). мне кажется очень вероятным, что проблема в используемом алгоритме, а не в include и "очень много кода" |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Можно упихать все это в объект и вызывать методы объектов. тогда глобальные переменные гармонично перетекут в свойства объекта... Для пущего страха можно сформировать массив методов объекта и схлопнуть цикл в 2 строки... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
IgorIV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
kanaris, а ты покажи хотя бы 3 if полностью.
|
|||
|
||||
kanaris |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 16.2.2008 Репутация: -1 Всего: -1 |
обработка данных
Уже думал над этим вариантом, лучше будет вайл и иф. Задача такая - блоки должны переключаться между собой в произвольном порядке (один блок выполнился, в зависимости от результата передает выполнение другому блоку, и так перепасовываются). Только что проверил, переменная-флаг $block в switch если и поменяется в каком-нибудь case...break, выполнение другому блоку, которому она будет соответствовать не передастся.
Я уже пробовал сделать сугубо на ООП, получилось много кода, в котором очень сложно разобраться, сейчас проектирую третью версию, предварительно разбив код на части, с учетом уровней абстракции. Я понял, что объекты нужно использовать там, где код по выполнению подобен объекту, а в данном случае нужно описать процесс, а не объект.
Кода для каждого if примерно столько: http://s50.radikal.ru/i129/1007/e0/9919d1aff3ee.gif |
||||||||
|
|||||||||
Muerto |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
2) поместить их в отдельные файлы, и инклудить их каждый раз. Но возникает вопрос - если цикл выполняется долго, и каждый раз будет инклудиться файл, это наверное сильно скажется на производительности?
ну во первых ты не прав, есь такая функция как require_once/include_once, она инклюдит всего один раз, а далее проверяер .... В php 5.3 есть новая функция которая напоминает batch файлы, а точнее goto Вот так её используют:
Вывод будет такой
А терь схема работы для тебя- берешь и ставишь все что в ифах в goto, и инклюдишь 1 раз... ![]() Это сообщение отредактировал(а) Muerto - 19.7.2010, 07:30 |
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
ага. и выполняется тоже - только один раз. смысл в бесконечном цикле, если каждая ветка сможет выполниться только единожды? kanaris, я не представляю себе, какая должна быть специфика, чтоб каждая из веток условия была заполнена абсолютно независимым от других веток кодом(алгоритмически - чтоб нельзя было вынести действия в функции с разными параметрами и по коду - чтоб просто не было общего кода и не было смысла выносить код в функции). |
|||
|
||||
IgorIV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
kanaris, если это 1 иф, то надо срочно менять алгоритм. Я так думаю, что у тебя все ифы сделаны через копи-пасте, просто изменив некоторые части. Попробуй функции.
|
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
skyboy,
А что мешает вынести все что в инклюдном файле в функцию допустим первый include_once("a.php"); файл выглядит так function a() { весь файл } И просто вызываем... Можно глобальные переменные сделать что бы функции говорили друг с другом... Таким образом все функции кстати вообще в один файл пихнуть можна... |
|||
|
||||
ArNic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Согласен с
Как самое лучшее решение выложить сюда пример трех ифов и показать что за огромный код спрятан. Иначе получается следующий диалог: "Ребята у меня вот дома лежит та-а-а-акая вот штука ... ну большая в общем как бы мне её засунуть в машину. Ну в багажник в пихнуть или на кусочки поделить и в салон засунуть. " И что тебе должны ответить? Я думаю - "делай как знаешь". Другой разговор, если ты говоришь: "Ребята у меня вот дома лежит 50 киллограм конины и 20 гук яиц, как бы мне её засунуть в машину ВАЗ 2107 . Ну в багажник в пихнуть или на кусочки поделить и в салон засунуть. При том, что на улице сейчас зима " Тут тебе люди смогут ответить. "Засунь максимально в багажник - там холоднее будет чем в салоне, но снчала постели целлофан, чтобы мясо не потекло. В принципе должно поместиться, если пустой он, а вот яица положи полку за задним сидением или лучше под ноги задних пассажиров, т.к. там меньшая вероятность разбиться." Если обратился - кажи код. Или получай неопределенные ответы. Это сообщение отредактировал(а) ArNic - 22.7.2010, 14:08 |
|||
|
||||
IgorIV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
ArNic, вот здесь - http://forum.vingrad.ru/index.php?showtopi...t&p=2185088 в конце сообщения есть замыленный скриншот и это только 1 иф
Это сообщение отредактировал(а) IgorIV - 22.7.2010, 15:37 |
|||
|
||||
ArNic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Я знаю что там рисунок
![]() Но я посмотрев на "замыленый" рисунок - не могу прочесть что там есть. Ты думаешь мне нужно количество строк в ифе? Имеется ввиду что там написано, какой код, какая логика. Может тебе помогут решить со структурой такого большого ифа и его вообще не будет, когда увидят сам код. Как решение могу посоветовать ещё один вариант:
а ифы уже по файлам Это сообщение отредактировал(а) ArNic - 22.7.2010, 15:51 |
|||
|
||||
bazzjr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 27.12.2007 Где: Россия, Пермь Репутация: 4 Всего: 6 |
ArNic, +500 ! Это сообщение отредактировал(а) bazzjr - 22.7.2010, 15:54 |
|||
|
||||
IgorIV |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 7.9.2009 Репутация: 2 Всего: 8 |
||||
|
||||
ArNic |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 278 Регистрация: 3.1.2007 Репутация: нет Всего: нет |
Ну тогда уж ты меня извини. ![]() ![]() ![]() И потом все гениальное просто - следовательно, ИМХО, алгоритм не гениальный. ![]() Добавлено через 5 минут и 31 секунду Кстати, совсем не гениально повторять код, а судя по пикселам и совпадению их в нескольких местах (смотри где у тебя 4 переменных расчитываются) повторение абсолютное. Следовательно if`ы могут быть и поменьше, если код оптимизировать. Это сообщение отредактировал(а) ArNic - 22.7.2010, 16:41 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |