Конструкторы и деструкторы в php

Конструктор в PHP — это метод, который вызывается автоматически при создании объекта класса. Деструктор служит для выполнения действий при закрытии объекта класса.

    Конструкторы и деструкторы

    Метод конструктор вызывается при создании объекта класса
    Класс не будет неявно вызывать конструкторы, которые определили в классах-родителях, если дочерний класс определяет свой конструктор
    Внутри конструктора дочернего класса требуется вызвать parent::__construct(), чтобы запустить конструктор родительского класса. Дочерний класс унаследует конструктор родительского класса как обычный метод, если в дочернем классе конструктор не определили и родительский конструктор не закрытый

    class BaseClass { function __construct() { echo "Конструктор класса BaseClass
    "; } } class SubClass extends BaseClass { function __construct() { parent::__construct(); echo "Конструктор класса SubClass
    "; } } class OtherSubClass extends BaseClass { // Наследует конструктор класса BaseClass } $obj = new BaseClass(); $obj = new SubClass(); $obj = new OtherSubClass();
    #Конструктор класса BaseClass #Конструктор класса BaseClass #Конструктор класса SubClass #Конструктор класса BaseClass

    С PHP 8.0.0 параметры конструктора можно продвинуть до свойств объекта, это сокращает кол-во шаблонного кода

    class Point { public function __construct(protected int $a, protected int $b = 0) { } public function GetVar() { echo $this->a; echo $this->b; } } $obj = new Point(4); echo $obj->GetVar();

    Не каждый аргумент обязан продвигать параметр конструктора до свойства объекта. Допустимо смешивать продвигаемые и непродвигаемые параметры в произвольном порядке, и давать обыкновенным параметрам конструктора имена, которые совпадают с именами свойств класса
    Атрибуты, которые установили для аргумента в продвинутом конструкторе, будут реплицированы как на аргумент, так и на свойство класса. Значение по умолчанию для аргумента в продвинутом конструкторе распространяется только на аргумент, а не свойство.

    new static

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

    class Product { private ?int $id; private ?string $name; private function __construct( ?int $id = null, ?string $name = null ) { $this->id = $id; $this->name = $name; } public static function fromBasicData( int $id, string $name ): static { $new = new static($id, $name); return $new; } public function showData() { echo $this->id; echo $this->name; } } $obj = Product::fromBasicData(10, "test"); $obj->showData();
    Деструкторы

    Как и конструкторы, движок PHP не будет неявно вызывать деструкторы, которые объявили в родительском классе. Необходимо вызвать parent::__destruct() в теле деструктора дочернего класса, чтобы запустить деструктор родительского класса
    Движок вызовет деструктор, даже если выполнение скрипта остановила функция exit()

    class MyDestructableClass { function __construct() { print "Конструктор\n"; } public function showTest() { echo "
    test
    "; } function __destruct() { print "Уничтожается " . __CLASS__ . "\n"; } } $obj = new MyDestructableClass(); $obj->showTest();

    Источники
    Последнее изменение: 17.11.2024 20:27


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ