2013-09-22 7 views
0

Я строю скребок, и в настоящее время мой класс разбора содержит около 100 конструкторов строк, которые запускают около 10 методов, содержащихся в классе и некоторых других сторонних компонентах.Что именно должен содержать конструктор?

Все эти методы вначале анализируют необработанный html и присваивают конечные значения атрибутам класса atttributes.

Является ли конструктор правильным местом для ввода этого кода? если нет, куда он должен идти, если я хочу, чтобы он выполнялся при создании экземпляра класса?

+1

Я вообще нахмурился на _doing_ что-то в создании экземпляра класса. Настройка переменных и среды прекрасна, но я оставляю работу другими способами. Если вам это нужно часто, создайте удобную функцию/метод, который делает именно это: создайте объект, а затем вызовите нужную функцию. 100 - путь к долгу. Если он выполняет несколько действий, разделите их на свои (возможно, частные/защищенные) функции, если он содержит несколько операторов if/switch, у вас есть кандидат на полиморфизм. Мое общее правило (с исключениями, конечно) - это функция должна быть <20 строк. – Wrikken

+0

@Wrikken В некоторых случаях допустимо, чтобы что-то произошло в функции '__construct'. Пример: '__construct() {session_start(); } '<- Основной способ, но демонстрирует приемлемую (после обработки ошибок) способ инициировать сеанс через класс –

+0

@DarylGill: да, есть исключения, это не 100%. Однако многое связано с тем, что он находится в нужном месте. Например, возьмите свой 'session_start()', я бы не ожидал его в чем-то вроде «нового календаря», я могу его разрешить в 'new SomeController()', я полностью ожидаю его в специальном 'новом Объект Session'. В этом случае, например, если теоретический объект «Calendar» _needs_ сеанс, я бы скорее определил выделенный класс/объект 'Session' и _require_ a' Session' в конструкторе «Календарь», чтобы сделать это ясно (' function __construct (Session $ session) {..etc ..} '). – Wrikken

ответ

0

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

+1

И, чтобы добавить к этому, определение небольших изолированных функций только с 1 целью делает его гораздо проще использовать наследование для создания объекта, который ведет себя по-разному только в той части, в которой вы нуждаетесь, без необходимости повторного внедрения/копирования/вставки большинства исходной функции. – Wrikken

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