Передача $HTTP_GET_VARS в класс

BigWindow

Новичок
Передача $HTTP_GET_VARS в класс

Всем привет!

Вот возник у меня такой вопрос. Сейчас по порядку напишу :)

Итак, у меня три файла:
1. form.php - обычная html страничка, с формой
2. s_form.php - обработка данных формы и занесение данных в БД
3. class.php - сборник классов, для функционирования скриптов

Суть в следующем:
1. Пользователь заполняет form.php
2. Данные из формы передаются в s_form.php
3. В s_form.php инклудится класс из class.php.
4. В этот класс передаются данные из формы

Собственно вопрос в пункте #4: как передавать данные в класс? :)

Лично у меня два варианта:
1. Проверять в s_form.php isset'ом и empty наличие переменных, и если они есть, передавать в класс, ак если нет хидером кидать обратно на заполнение формы. Минус этого метода, что логика проверки разделена между классом и скриптом.
2. Передавать данные в класс без проверки. А уже в классе полностью осуществлять все необходимые проверки. Минус этого метода в том, что при передаче $HTTP_GET_VARS['id'], если id не объявлена, появляется ошибка.

Вот я и думаю, как быть? Какие мысли у тех, кто дочитал до конца? :)
 

Pigmeich

Новичок
BigWindow
Ну, во-первых, пользуйтесь $_GET.

Во-вторых поищи по форуму по словам "шаблонизация" и "MVC"

-~{}~ 07.02.08 08:22:

А в-третьих не заморачивайся объектами, когда не понимаешь абстракцию. ИМХО проще отрефакторить потом, чем ломать голову сейчас. Ибо перед глазами будет код.
 

BigWindow

Новичок
Автор оригинала: Pigmeich
Ну, во-первых, пользуйтесь $_GET.
А какая разница между $_GET и $HTTP_GET_VARS?

-~{}~ 07.02.08 08:43:

Ну в общий чертах сейчас глянул, что такое MVC. Выходит, я на правильном пути был. И обработку переменных все-таки делать в s_form.php

-~{}~ 07.02.08 08:48:

Ять! ПРочитал :) $_GET у нас суперглобальный массив. Теперь ясно, почему лучше его использовать :)
 

Фанат

oncle terrible
Команда форума
BigWindow
а этот класс - он ещё для других целей испольщзуется, кроме обработки этой формы? А для каких?
 

BigWindow

Новичок
Автор оригинала: *****
BigWindow
а этот класс - он ещё для других целей испольщзуется, кроме обработки этой формы? А для каких?
Этот класс вообще описывает определенную сущность. У меня это статьи. Т.е. класс описывает все возможные манипуляции с этой сущностью: добавление, удаление, редактирование и т.д.
 

Фанат

oncle terrible
Команда форума
Завидую.
Сам-то я до сих пор не могу понять, как присобачить объект к работе с новостями.
 

Pigmeich

Новичок
BigWindow
А какая разница между $_GET и $HTTP_GET_VARS?
Ять! ПРочитал $_GET у нас суперглобальный массив. Теперь ясно, почему лучше его использовать
Ну HTTP_GET_VARS тоже.

Просто это старые имена пришедшие с третьей версии. В php.ini есть опция long arrays-чего-то-там и если она выключенна, то массивы HTTP_GET_VARS и HTTP_POST_VARS определенны не будут.
 

BigWindow

Новичок
Автор оригинала: Pigmeich
Ну HTTP_GET_VARS тоже.
Как я понял, $_GET - суперглобальный массив, который не требует объявление его как GLOBAL, например, в функции.
$HTTP_GET_VARS, же, требует определение как GLOBAL, иначе функция его не увидит.
 

Pigmeich

Новичок
BigWindow
Этот класс вообще описывает определенную сущность. У меня это статьи. Т.е. класс описывает все возможные манипуляции с этой сущностью: добавление, удаление, редактирование и т.д.
Забыл как называлась это. Но это типичный представитель слоя Model, Типичный в том смысле, что всякие товарищи типа Фаулера такие классы и имели в виду.

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

И я бы не стал заставлять получать аннотации вызывая $anArticle->GetAnnot для каждой статьи из списка. Потому что каждый вызов - отедльный запрос. Потому я бы ввел отдельную сущность список статей ArticleList который бы формировал в factory method по массиву условий. А потом получал бы аннотации итерируя ArticleList. Естественно, нужно перегрузить итерирования объекта в классе ArticleList (Object iteration ) а внутри ArticleList закешировал бы получение списка аннотаций.

Собственно, про эти сложности Фaнат и говорил.

-~{}~ 07.02.08 11:35:

BigWindow
Как я понял, $_GET - суперглобальный массив, который не требует объявление его как GLOBAL, например, в функции.
$HTTP_GET_VARS, же, требует определение как GLOBAL, иначе функция его не увидит.
$_GET в любом случае лучше из-за совместимости.
 

BigWindow

Новичок
Апокалипсис, сенкс за ссылку!


Pigmeich, интересный подход. Только вот я не понял, что значит "внутри ArticleList закешировал бы получение списка аннотаций".
 

Pigmeich

Новичок
BigWindow
Pigmeich, интересный подход.
Мопед не мой. Все стрелки на Фаулера и прочих смоллтолщиков. И вообще, это же твой подход.

Только вот я не понял, что значит "внутри ArticleList закешировал бы получение списка аннотаций".
Ну это такой прикол для оптимизации.

Основной принцип - тяжелые действия (вроде запросов) должны выполнять on demand и не повторяться.
Потому заводим в классе приватное поле в котором будет храниться массив из аннотаций. Потом, при первом обращении к итератору вызываем функцию RetriveAnnots которая проверяет есть ли закешированные аннотации - если нет, то берет их из базы. Ну а потом итераторные функции просто гребут информацию из этого массива.

Для особого эстетсва иногда заводят функцию ClearCache или нечто вроде, которая обнуляет кеш. Но это нужно в очень, очень редких случаях. Досточно просто объект класса ArticleList надолго не создавать (short lifetime).
 

BigWindow

Новичок
Но ведь этот кэш из анотаций нужно где-то хранить?

-~{}~ 07.02.08 12:15:

Хоть можно сариалайзить и в файлик запёхать.
 

jonjonson

Охренеть
Автор оригинала: *****
Завидую.
Сам-то я до сих пор не могу понять, как присобачить объект к работе с новостями.
Не нужно собачить. Главное интерфейс. Он описывает что делается! А с чем - это к кому применяется, зависит от вашей абстракции (её сложности и закомплексованности).

Бутылка отвечает за сохранность жидкости, но не за то, какая жидкости хранится.
Жидкость имеет методы определения что она за срань - вкус цвет торкучесть...
Тот или иной объект организм может использовать эти методы определения жидкости и открытия\закрытия\наливания_из\нюханья_из бутылки.
Всё зависит насколько сложно вы хотите определить абстракцию.
Можно опустить бутылку (работу с ней) и работать с жидкостью напрямую :)

Ключевое слово работать. Если эту работу можно с чем-то связать, то это объект.

Например, если нельзя на прямую что-то сделать с объектом новость, то придётся это решать с менеджером новостей
 

MagnetiZ

Новичок
BigWindow
Чем передавать переменные GET в класс сделай лучше дополнительный слой абстракции над самими входящими переменными.
Так например это может быть
Х слой: запрос входных параметра в общем (по имени, типу, другим параметрам)
Х-1 слой Определение типа запрашиваемого параметра
...
0 слой - работа с определенным типом запрашиваемого параметра (GET, POST, SESION, COOKIE, $_FILES, .... )
jonjonson
Походу Эти слои абстракии ничего и не хранят. Только предварительно перед отдачей форматируют.
 

Pigmeich

Новичок
MagnetiZ
по-моему это ravioli code называется. :)

-~{}~ 07.02.08 15:29:

http://en.wikipedia.org/wiki/Ravioli_code
 
Сверху