oop — объектно-ориентированный PHP, как функция __destruct вступает в игру?

В PHP при определении классы; часто есть __construct (конструктор) и __destruct (Деструктор) реализовано в объект когда он является созданный а также «Уничтожены».

В PHP объект «уничтожается», когда он перестает использоваться

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

1

Решение

«Когда объект больше не нужен, его нужно удалить. Объекты, созданные в функциях как локальные переменные. (…) Когда объект удаляется, вызывается его функция-член деструктора. Понятно, почему конструкторы так важны, объекты должны быть правильно инициализированы, прежде чем их можно будет использовать, но действительно ли необходимо иметь специальную функцию-член, которая вызывается, когда объект собирается исчезнуть?

Во многих случаях ответ отрицательный, мы могли бы оставить компилятор, чтобы придумать вариант по умолчанию. Однако предположим, что ваш объект содержал список попаданий детектора, из которого он был построен. Не вдаваясь в детали, вполне вероятно, что это будет какой-то динамический объект, принадлежащий объекту и доступный через указатель. Теперь, когда придет время удалить объект, мы хотим, чтобы этот список был удален, но, вероятно, не хиты, на которые он указывает! Компилятор, возможно, не может знать, когда он сталкивается с указателем в объекте, указывает ли он на что-то, принадлежащее объекту и также подлежащему удалению, или просто на что-то связанное с объектом, но не зависящее от него.

Таким образом, правило гласит: если объект в течение своей жизни создает другие динамические объекты, он должен иметь деструктор, который впоследствии удаляет их. Невозможность привести в порядок подобное может привести к тому, что объекты-сироты просто забивают память, что называется утечкой памяти. Даже если значение по умолчанию приемлемо, хорошая идея определить деструктор … »

Узнать больше: ОО Концепция: Конструкторы & деструкторы

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]