Вот подумалось, а что если сделать такую структуру скрипта. Если index.php сделать так называемой "входной точкой" скрипта и далее делить скрипт на несколько частей (в этом примере на get и post) PHP: <?php include 'config.php'; if ($link = mysql_connect($mysql['host'], $mysql['user'], $mysql['pass'])) { if (mysql_select_db($mysql['base'])) { include "common.php"; if ($_SERVER['REQUEST_METHOD']=='GET') { include "get.php"; } elseif ($_SERVER['REQUEST_METHOD']=='POST') { include "post.php"; } else { header("HTTP/1.0 404 Not Found"); } } else { die(mysql_error()); } mysql_close($link); } else { die(mysql_error()); } ?> Дело в том что в любом скрипте между GET и POST запросами нет ничего общего, стало быть и делать общего у них кроме конекта к базе практически и быть не может... Далее разбивать их ещё на части, например в get.php сделать мой любимый PHP: <?php $mode = 'default'; if ( isset($_GET['mode']) ) { if ( !empty($_GET['mode']) ) { if ( !preg_match("#[^a-z]#s", $_GET['mode']) ) { $mode = $_GET['mode']; } } } $filename = 'module_' . $mode . '.php'; if ( file_exists($filename) ) { include $filename; } else { header("HTTP/1.0 404 Not Found"); } ?> Далее можно вообще разбить его хоть на тысячи мизерных файлов чтоб не загружалась ни одна строчка кода которая не имеет исключительно важного значения Во многих скриптах (в том числе и рнрВВ) почему-то чаще всего грузяться тонны функций и классов в том числе и те которые будут не нужны. Как это будет смотреться со стороны ? Велосипед или ....... ?
я веду разработку на уровне директориев с псевдонаследованием. тож ничё а уж работу с базой давно вынес ядро.
Vladson, походу, читает мои мысли На get и post я делить как то не догадался, но проблема та же в голове крутиться — минимизировать обьем исполняемого кода... даже не проблема, а так — смутное желание... В принципе, у пеня примерно так и делается - у меня: PHP: <? include('logic/'.$mode.'.php'); $tpl->parse('MODULE_OUTPUT',$mode); ?>
А зачем все делать в одном файле? Для пост-запросов создаем отдельный и все. Для вывода: если используется шаблонизатор, то один index.php, который смотрит на параметры GET (указанные явно, или mod_rewrite'ом сделанные) и парсит соответствующий шаблон. Если нет шаблонизатора, то я обычно делаю несколько файлов. Причем они, как правило, по структуре один-в-один совпадают с файлами шаблонов. Складывать все функции в func.php - тоже не дело: лучше создать что-то типа common.php, db.php, bla-bla-bla.php, ... Абсолютно то же самое у меня с .css. Есть common.css, index.css, contacts.css и т.д. Но это, в основном, ради удобства: большой .css неудобно редактировать и приходится давать длинные имена и сложные правила (эх, была бы в IE нормальная поддержка наследования в CSS - жить было бы проще ).
Так все и делают, и я тоже, но тут я предлогаю пойти ещё дальше... (вообще до уровня полной паранои) Именно что не дело, однако большенство делают именно так (хотя все понимают что так не надо делать)
У меня достаточно часто бывают и пост и гет запросы - например гет из .htaccess (mod_rewrite) пост из страницы, а бывает то и другое из страницы. Поэтому считаю что идея неверна в корне, либо я ее не понял. Раньше обычно делал один файл, например index.php на который перенаправлял все запросы к несуществующим файлам или к типам файлов которые должны обрабатываться скриптом. Практика показала - геморно. Поддержка отнимает у людей много времени, в том числе и у автора - то есть у меня самого. Как мне кажется пришел к оптимальному на данный момент решению (собственно так и начинал когда то давно программировать на пхп): Определяем количество типов отображения страниц и создаем на них по файлу. Например на маленьком сайте - для этого достаточно одного файла. Для больших 6-30 - зависит от того насколько сложный сайт. Далее в каждом файле описываем поведение скрипта в этих файлах. ну собственно и все. Те же самые запросы отправляем на index.php, там делаем подключение constructor.inc, файл должен содержать минимальный необходимый набор подключений и действий чтобы скрипт мог функционировать (например подключение БД, чтение системных конфигов). Далее определяем какая страница запрошена. И делаем соответствующий инклуд. То есть подключаем один из наших 6-30 файлов. подключаем destructor.inc и все. Ну и все, там уже пожалуйста прописываем все что душе угодно, но не стоит перегнуть с объемом - рекомендуемый объем до 100 строк. ИМХО такой вариант прост в поддержке и не нужно искать какое событие случилось, чтобы определить какой файл открывать для правки - достаточно знать область события. Кроме того каждый файл открывает тот набор файлов классов и функций который небходим для его работы, то есть системе не нужно держать в уме все инклуды. А мельчить область по типу запроса, на мой взгляд не есть правильная идея.
Vladson главное, чтобы не получилось так, как у автора одной статейки по шаблонам в Perl.. "Все началось с того, что хотел подправить текст сообщений ... жестко введенный в коде ... // описание методов шаблонизации и т.п. В итоге страница стаба собиратся из 28 файлов.."
(эта часть была вынесена в отдельную тему однако касается этой по этому повторю) Не понял, я имею в виду не использование разными файлами POST и GET переменных, а разруливание разными модулями скрипта POST и GET "HTTP-запросов" А вообще топик про разбитие на логически завершённые блоки в которых есть одна точка входа и несколько точек выхода для придания коду структуру "дороги с множеством развилок", вместо того чтоб делать структуру "паука" у которого есть ядро и куча точек входа и выхода (как это сделано например в рнрВВ) а GET и POST это лишь примеры DarkElf Полностью с тобой согласен, цель должна оправдывать средства, и это касается ВСЕГО ЧТО ЕСТЬ В ЭТОМ МИРЕ (и программирования в частности) писать движки сайта на ассемблере или писать драйвера видиокарт на JavaScript это не самый лучший выход
Наконец я нашел время на написание ответа. Итак, Хорошо, пусть есть массив $_POST и $_GET и есть модуль (пусть это будут объекты) $POST и $GET. Предположим, что вопреки коду первого сообщения $POST и $GET могут выполняться одновременно (иначе однозначно косяк). Но если у нас $POST и $GET содержат в себе логику при этом являются точками входа, получается, что при одновременном вызове нужно заботиться о том, чтобы логические цепочки не прерывались до того как оба модуля отработают. А так как у нас вся логика заключена в эти модули и логика одного модуля, если я правильно понял, не зависит от другого, получается что это достаточно проблематично. Например - использование редиректа. Или в пхп часто встречаются любители exit() Предположим, что Источник Перечень источников Слово "прикладные" отбросим и получаем, что согласно указанной выше цитате логика снова не правильная. Лично я всегда стараюсь придерживаться этого правила, о котором рассказывают еще на первом курсе института.
Мы всё равно как будто на разных языках говорим... Какие нахрен объекты точки входа и прочая фигня, ты понимаешь что такое URL ? Вот я и предлогаю в зависимости от URL делать те действия для которых он предназначен... Поясню в тысячный раз !!! У меня нас есть гостевуха с урлами вида index.php?mode=viewpage&num=1, index.php?mode=viewpage&num=2 и.т.д. На странице есть пост форма index.php?mode=addpost Всё что я предлогаю это во время обращения к viewpage и addpost с помощью условий и include() ГРУЗИТЬ ТОЛЬКО ТЕ КУСКИ КОДА КОТОРЫЕ НУЖНЫ ДЛЯ ЕГО ВЫПОЛНЕНИЯ И НЕ БАЙТОМ БОЛЬШЕ !!! ВСЁ НИЧЕГО ДРУГОГО !!!
Я вроде на все ответил по цитатам. У тебя снова какой-то не адекват включился. Если мыслить рамками только гостевых мог написать все проще без заявок на какую-либо многоуровневую систему. Уже неоднократно замечаю, что у тебя все сводится к гостевым.