2009-05-15 2 views
1

Я новичок в программировании на объектно-ориентированном программировании и написании некоторых из моих первых классов для приложения PHP.правильное использование «конструкции» при разработке классов

В некоторых более простых классах я объявляю function __construct() и внутри этой функции вызываю определенные методы класса. В некоторых случаях я обнаруживаю, что создаю экземпляр класса в своем приложении и не нуждаюсь ни в чем в результирующем объекте, потому что класс __construct() назвал методы, которые выполняли свою работу, оставив мне ничего не относящегося к классу.

Это мне не нравится. Кажется тупой, что у меня есть новый объект, с которым я никогда ничего не делаю.

Опять же, я подчеркиваю, что это относится только к некоторым из моих более простых классов. В более сложных я использую методы класса через объект и вне __construct().

Нужно ли мне переосмыслить, как я кодирую вещи, или я в порядке?

ответ

4

Ну, конструктор используется для создания нового экземпляра класса и для любой необходимой настройки для этого класса. Если вы просто создаете класс и оставляете его, это кажется немного пустым. Почему бы, например, не использовать статические функции в классе в качестве организационного инструмента и просто называть их (или функцию, которая их вызывает), а не создавать новый экземпляр, который вы никогда не будете использовать?

+0

Черт, ты избил меня, я как раз собирался сказать то же самое. xD –

+0

Ха, это была повторяющаяся проблема для меня. Меня всегда избивают вопросы, на которые я могу ответить. : P Мне просто повезло на этот раз! : D – Annath

2

Это мне не нравится. Кажется тупой, что у меня есть новый объект, с которым я никогда ничего не делаю.

Да, это должно поднять красный флаг.

В общем, вы не должны позволять конструкторам иметь какие-либо побочные эффекты; Они предназначены для инициализации состояния объекта - ни для чего другого. Конечно, есть исключения из этого правила, но в целом это хорошая путеводная линия. Вы также должны воздерживаться от каких-либо тяжелых вычислений в конструкторе. Переместите это вместо метода.

Side effects есть много вещей - изменение глобальных переменных или статических (класс) переменных; вывод в окружающую среду (например, звонки на print(), header() или exit()); вызовы в базу данных или другую внешнюю службу и даже изменения состояния других объектов.

Свободная функция побочного эффекта также называется «чистой» функцией - в отличие от процедуры , которая является функцией, которая имеет побочные эффекты. Хорошая практика заключается в том, чтобы явно отделять чистые функции от процедур (и, возможно, даже маркировать их как таковые).

Смежные вопросы