Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: использование непроинициализированного объекта

Сообщения:  [1-6] 

 
 автор: mechanic   (07.08.2008 в 16:41)   письмо автору
 
   для: mechanic   (06.08.2008 в 13:40)
 

додумалсо, тут можно заюзать паттерн Состояние (State)

  Ответить  
 
 автор: mechanic   (06.08.2008 в 13:40)   письмо автору
 
   для: Axxil   (06.08.2008 в 13:08)
 

мне кажется нет смысла делать set-методы, которые будут вызываться в конструкторе с захардкоденным параметром ($this->setLogger(new Logger)), легче сразу написать $this->logger = new Logger; или передать $logger в конструктор и присвоить $this->logger = $logger;, а если параметров много?.. не хочется городить мегаконструкторы
смысл то этих методов в том, чтоб вызывать их снаружи, правильно ведь? зачем хардкодить в конструкторе
в общем тут чувствуется затык, и обычно это означает что у кого то проблемы в проектировании, и что на самом деле так никто не делает )
* ушел думать

  Ответить  
 
 автор: Axxil   (06.08.2008 в 13:08)   письмо автору
 
   для: mechanic   (06.08.2008 в 12:55)
 

Не понял я.
Если вызовы setLogger, setErrorHandler обязательны, то почему их в конструктор не поместить?
Конструктор для этого и придуман, чтобы подготовить объект к использованию.

  Ответить  
 
 автор: mechanic   (06.08.2008 в 12:55)   письмо автору
 
   для: Axxil   (06.08.2008 в 12:51)
 

но если перед ней надо выполнить setLogger, setErrorHandler и все такое
т.е. смысл инициализации - в законченности объекта, в том, чтоб разрешить использование объекта, только если все эти set-методы выполнены и объект "готов"

  Ответить  
 
 автор: Axxil   (06.08.2008 в 12:51)   письмо автору
 
   для: mechanic   (06.08.2008 в 12:48)
 

непонятно, что мешает инициализацию в конструктор засунуть? Тогда она гарантировано будет выполнена.

  Ответить  
 
 автор: mechanic   (06.08.2008 в 12:48)   письмо автору
 
 

как можно спроектировать класс, чтоб сабж был невозможен?
например $user = new User; пустой объект, если вызвать $user->getName() - будет false
и как бы сразу не поймешь, что забыл вызвать для начала $user->init();, а в каждом методе писать
if(!$this->initialized) {throw new Exception...} неинтересно и неэлегантно

с getName() какой то простой пример получился, а вот в случае посложнее, когда перед использованием нужно сделать $user->setLogger(new Logger); чтоб объект вел логи, недопустимо пропускать инициализацию, ибо это приведет к фаталу при вызове методов несуществующего объекта $this->logger

  Ответить  

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования