Реализация всех действий класса созданием объекта

Реализация всех действий класса созданием объекта

Всем добрый день ))).
Начну с конкретного примера, чтобы добраться до сути. Есть форма, в которую пользователь вводит некие данные и отправляет их на сервак. Задача скрипта привести эти данные к нужному виду и просто сохранить в БД. Всё. В конце ставим редирект, никакого вывода на экран. Есть класс, который всё это проделывет и скрипт выглядит примерно так:
PHP:
class Saver {
//набор необходимых методов
...
}

new Saver($_POST['someData']);
header(redirect);
Всё, скрипт отработал, всё хорошо. Но вот, меня как то смущает что здесь только одна строка, так сказать, рабочего кода. Даже исопльзуя библиотеку ф-ий для работы с DOM XML мы пишем:
PHP:
$xml = new domDocument;
$xml->loadXML($doc);
Пока писал, сам догнал, почему так - между созданием объекта и загрузкой документа можно установить ряд свойств, влияющих на работу с документом (типа preserveWhiteSpace). Неудачный пример (((. Тогда не буду париться. Как лучше писать ? Оставить код таким как он есть сейчас, или сделать примерно так:
PHP:
$s = new Saver($_POST['someData']);
$s->save();
Возможно вопрос незначителен, но вдруг есть какие то серьёзные аргументы в пользу какого-либо способа. Да, и ещё. Не предлагайте не писать классы - я объектный фанатик ))) Да и вопроса тогда бы и не было )))
 

Pigmeich

Новичок
Вася Патриков
Можно деструкторы использовать. Будет тебе полная гарантия его вызова после конструктора (ну если ничего не закрешится и трики пользователь применять не будет).
 

QQQ

Новичок
с точки зрения понятности кода - второй способ конечно лучше

а так без разницы
 
)))) Вы не обижайтесь, но то что вы написали в скобках - для меня набор слов )))).
Дело не в деструкторах , а в способе "запуска" рабочего кода - меня это интересует.
Это to Pigmeich было.
 

Pigmeich

Новичок
Вася Патриков
Когда ты создаешь объект запускается конструктор, когда объект удаляется - деструктор.

Объект удаляется, обычно, когда на него не осталось ссылок - обычно, это конец блока содержащего переменную с ссылкой на объект.

Если все завершить аварийно или воспользоваться reflection можно добиться что деструктор выполнятся не будет. Но это не твой случай, видимо.

А лезть в объекты не познав структуры их работы - опасно для жизни.

-~{}~ 09.11.07 11:21:

Код выставления хидеров запускать в деструкторе, если быть лаконичнее.
 
Pigmeich
раз уж на то пошло, то насколько мне известно в PHP5 нет деструкторов, а реализован механизм сборки мусора. Но это уже совсем другая история, давайте не будем дискутировать на эту тему. А то, что я непонял, так это слова "трики" и "закрешиться"...)))
Может есть у кого ещё серъёзные мысли на мой вопрос ? Какие могут быть аргументы ?..

-~{}~ 09.11.07 11:44:

Pigmeich
Опа, извинияюсь ))) деструкторы оказывается есть... жесть. Но никогда не пользовался... и слава богу наверное )))
 

AmdY

Пью пиво
Команда форума
PHP:
new Saver($_POST['someData']); 
header(redirect);
вообщето у тебя даже header лишний
Зачем делать лишние движения, пускай уж всё разруливается в Saver
PHP:
$xml = new domDocument(); 
$xml->loadXML($doc);
а ты сам не можешь сказать почему лодер не стоит по умолчанию?
я объектный фанатик
PHP5 нет деструкторов
Читай мат часть.
 
AmdY
Никогда не понимал такой жёсткости со стороны модераторов клуба - надпись типа "читай мат часть" аналогична тому, что типа "отдыхай сынок, почитай умную книжку" - зачем так к людям ?
Теперь что касаемо лишнего header`а. Класс подразумевает инкапсуляцию данных и методов для работы с ними - он ведь не знает что это данные из формы - зачем тогда впихивать туда редирект ??! это "низкоуровневый" класс-утилита может быть, которого не должно касаться, зачем его вызвали вообще...
... почму лоадер не запускается сразу... сказал же, что к моменту парсинга догумента, должны быть установлены св-ва класса, которые влияют в последующем на работу с документом... детей разводите короче.
Итак я понял видимо, что вопрос не стоит и выеденного яйца, а уж и мозга подавно ))))))))))). Видимо способ "запуска" рабочего кода стоит выбирать учитывая контекст вызова. Но всё же второй способ мне кажется более удобным (понятным, наглядным и т.д). Всем спасибо за ответы, QQQ - ещё и за поддержку )))
 

AmdY

Пью пиво
Команда форума
читай внимательно как я тыкаю, я сразу привёл фразу, где ты пишешь, что "я объектный фанатик", а затем фразу из которой видно, что ты не знаешь ООП в РНР.
Насчёт лодера, ответ бредовый. $xml = new domDocument(); вовсе не обозначает, что ты обязательно будешь лодить его, возможно его будешь создавать, поэтому две строки.
А свои классы нужно создавать максимально автономными, чем меньше API, тем лучше.
 

Pigmeich

Новичок
Вася Патриков
Даже в оплоте сборки мусора, где освобождать почти ничего не надо - .NET'е есть деструкторы. Смысл не в уничтожении памяти, а имено в выполнении действий по завершению работы класса.

Трик - trick (see you dictionary), трюк.

Закрешится - has go into crash (see you dictionary), свалится.

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

Теперь что касаемо лишнего header`а. Класс подразумевает инкапсуляцию данных и методов для работы с ними - он ведь не знает что это данные из формы - зачем тогда впихивать туда редирект ??! это "низкоуровневый" класс-утилита может быть, которого не должно касаться, зачем его вызвали вообще...
Но тогда зачем он возвращает код хидеров? Он должен возращать соответсвующий признак.
А еще закон Деметры не всегда стоит столь рьяно применять.

AmdY
Боян:
Есть 3 уровня IT-умения:
1. не умею использовать.
2. умею использовать.
3. умею не использовать.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Pigmeich, уровней умения намного больше:
* понять
* интегрировать
* сделать лучше
* упростить
* найти дырку в безопасности
:)
 

AmdY

Пью пиво
Команда форума
grigori, ты как раз пропускаешь данный случай - не умею использовать, но считаю что использую.
 

cDLEON

Онанист РНРСlub
new Saver($_POST['someData']);
А что будет, если проверить сохранились ли данные ?
Помоему лучше будет писать
PHP:
Saver::Save($_POST['blablabla']);
Так хоть есть возможность проверить сохранены ли они...
 

Fred

Новичок
Автор оригинала: cDLEON
PHP:
Saver::Save($_POST['blablabla']);
Так хоть есть возможность проверить сохранены ли они...
В случае
PHP:
$saver = new Saver($_POST["blablabla"]);
при ошибке выкидывать исключение ;)
 

AmdY

Пью пиво
Команда форума
если исключения, то нужно try catch, а если $saver = new Saver($_POST["blablabla"]), то return
 

Fred

Новичок
Автор оригинала: AmdY
если исключения, то нужно try catch, а если $saver = new Saver($_POST["blablabla"]), то return
ну тогда будет

PHP:
try {
    $saver = new Saver($_POST["blablabla"]);
    return true;
} catch (Exception $e) {
   return false;
}
 
Сверху