@GPK1929

Где и в каких случаях в php (ООП) используется __constructor?

Объясните пожалуйста для чего нужен метод конструктор, как и где его необходимо использовать?
  • Вопрос задан
  • 3310 просмотров
Решения вопроса 1
Воспринимайте конструктор как то, что срабатывает при вызове:
new Object()
Способов применения масса. Я думаю, вы часто видели, если что-то писали на ООП-PHP конструкции типа
new Object($var, $anotherVar);

Выше ответили про присвоение значений свойствам класса, но это может быть и что-то более интересное, например, оповещение приложения о создании объекта, получение файлов конфигурации и настройка объекта из них и так далее, и тому подобное.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Метод конструктор вызывается при инициализации объекта. В контексте PHP его главная задача - инициализировать все свойства значениями, что бы добиться какого-то начального состояния объекта. Так же туда следует передавать все зависимые классы. И крайне не рекомендуется в конструкторе делать что-то сложное, например, как пишет @hlogeon, кого-то нотифаить о своем присутствии, или с конфигами работать. Это все должно быть по хорошему сделано до инициализации. Если у вас в конструкторе код лезет в файлы/базу то это уже сигнал о плохом дизайне.

class Bar {
    public function doSomething() {}
}
class Foo{
    private $bar;
    private $someConfig;
    private $createdAt;
    public function __construct(Bar $bar, $someConfig) {
         $this->bar = $bar;
         $this->someConfig = $someConfig;
         $this->createdAt = new \DateTime();
    } 
}

// загружаем конфиг каким-то образом
// мы не должны заставлять Foo что-то делать еще, что не относится к его задаче
// например он не должен знать как создается класс Bar и что ему нужно
// он не должен ничего знать о том где хранятся конфиги и т.д. 
// Для этого можно отдельный класс сделать, который будет знать где брать конфиги
// но не будет знать как эти конфиги используются.
$config = $configurator->getConfig('foo');
$bar = new Bar();
$foo = new Foo($bar, $config);
Ответ написан
TekVanDo
@TekVanDo
Javascript Developer
Конструктор нужен для действий связанных с созданием экземпляра класса. Например: При создании объекта мы хотим чтобы автоматически создавалась запись в базе. Также через него в него можно было передавать для настройки объекта:
class MyDestructableClass {
   function __construct($name) {
       print "Конструктор\n";
       $this->name = $name
   }
}

$obj = new MyDestructableClass("test"); //будет создан объект со свойством name == "test"
Ответ написан
svd71
@svd71
В ООП конструктору отводится роль инициализации объекта (таких операций как выделение нужной памяти для размещения полей объекта, инициализация этих переменных). Умельцы так же вставляют в конструктор код по взаимодействию с другими объектами (такое иногда требуется: например если в какой то коллекции создается еще один элемент, то этот элемент об успехе операции информирует коллекцию).

В php само понятие ООП синтезировано изначально из необъектных скриптов и соблюдение некоторых парадигм ООП не является обязательным.
Ответ написан
Комментировать
copist
@copist
Empower people to give
Назову несколько типовых структур данных, при использовании которых требуется что-нибудь передать через конструктор объекта:
1. Стек
2. Очередь
3. Дерево или другой связный список
Почитайте тут habrahabr.ru/post/190176
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы