Я строю скребок, и в настоящее время мой класс разбора содержит около 100 конструкторов строк, которые запускают около 10 методов, содержащихся в классе и некоторых других сторонних компонентах.Что именно должен содержать конструктор?
Все эти методы вначале анализируют необработанный html и присваивают конечные значения атрибутам класса atttributes.
Является ли конструктор правильным местом для ввода этого кода? если нет, куда он должен идти, если я хочу, чтобы он выполнялся при создании экземпляра класса?
Я вообще нахмурился на _doing_ что-то в создании экземпляра класса. Настройка переменных и среды прекрасна, но я оставляю работу другими способами. Если вам это нужно часто, создайте удобную функцию/метод, который делает именно это: создайте объект, а затем вызовите нужную функцию. 100 - путь к долгу. Если он выполняет несколько действий, разделите их на свои (возможно, частные/защищенные) функции, если он содержит несколько операторов if/switch, у вас есть кандидат на полиморфизм. Мое общее правило (с исключениями, конечно) - это функция должна быть <20 строк. – Wrikken
@Wrikken В некоторых случаях допустимо, чтобы что-то произошло в функции '__construct'. Пример: '__construct() {session_start(); } '<- Основной способ, но демонстрирует приемлемую (после обработки ошибок) способ инициировать сеанс через класс –
@DarylGill: да, есть исключения, это не 100%. Однако многое связано с тем, что он находится в нужном месте. Например, возьмите свой 'session_start()', я бы не ожидал его в чем-то вроде «нового календаря», я могу его разрешить в 'new SomeController()', я полностью ожидаю его в специальном 'новом Объект Session'. В этом случае, например, если теоретический объект «Calendar» _needs_ сеанс, я бы скорее определил выделенный класс/объект 'Session' и _require_ a' Session' в конструкторе «Календарь», чтобы сделать это ясно (' function __construct (Session $ session) {..etc ..} '). – Wrikken