@websiteserf

Где грань между созданием экземпляра объекта (new Class()) и использованием оператора разрешения области видимости (::)?

Много читал материала, но так и не понял (возможно тупенький). В каких случаях следует создавать экземпляр объекта, а в каких случаях хватит разрешения видимости ::.

Прошу объяснить на примере класса валидации формы:

Сейчас делаю так.
$data = Request::post('text');
// Создать экземпляр формы.
$form = new Form($rules);
$form->validate($data)
if(!$form->isValid()) {
  echo $form->error()->msg();
}

Обязательно ли создавать экземпляр? Или можно обойтись статическими методами:

$checkForm = Form::validate($rules, $data)
if(!$checkForm) {
  echo Form::getError();
}


Единственное что знаю, экземпляр надо создавать тогда, когда он оперирует уникальными данными (привет PDO)

Подскажите. Где эта самая грань между new и ::
Когда нужно, а когда не нужно?
(Вероятнее ответ есть в сети, но я не могу сформулировать запрос)
  • Вопрос задан
  • 265 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Статические методы стоит использовать в качестве именованных конструкторов. Для всего остального лучше создавать экземпляры объектов, потому что статические методы к ООП, по большому счёту, никакого отношения не имеют и поэтому размывают парадигму для тех, кто в ней не очень хорошо ориентируется.
Если в статическом методе нет работы с состоянием и таких методов много, скорее всего, автор кода не очень проникся идеями ООП и код написан в процедурном стиле. А если там есть модификация какого-то состояния, то это работа с глобальными переменными (почему глобальные переменные - это плохо, надеюсь, пояснять не нужно).

Обязательно ли создавать экземпляр? Или можно обойтись статическими методами

У вас в коде есть вот это: echo Form::getError();. Откуда статический метод будет получать информацию об ошибке формы? Как он будет отличать ошибки одной формы от другой?

Единственное что знаю, экземпляр надо создавать тогда, когда он оперирует уникальными данными
Экземпляр нужен тогда, когда у него есть какое-то собственное состояние (ошибки валидации, например). У двух объектов состояние может совпадать (то есть быть неуникальным), но это не значит, что в следующий момент один из них не изменится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
trevoga_su
@trevoga_su
ты не умеешь еще мыслить объектами
поэтому задаешь эти вопросы. и получаешь не менее глупые ответы.
почитай хотя бы первые полкниги Гради Буча
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Никакой значительной разницы по функционалу кроме того что нельзя использовать $this статический вызов не несёт.
Как удобнее в общем-то...

И да(@alexey-m-ukolov) это не по ООПешному.
Ответ написан
@Sad_Bro
На темной стороне.
удобно в таком классе хранить несколько сходных по назначению методов, использовать класс как контейнер., ничего не наследуя от него, а просто используя его как контейнер. Для примера Math::rand() или Math::sqrt($a); что то в этом роде
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы