правильное использование конструкции при разработке классов - PullRequest
1 голос
/ 15 мая 2009

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 15 мая 2009

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

2 голосов
/ 15 мая 2009

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...