Можно ли объявить деструктор приватным?
Некоторые из моих классов объявляют свои конструкторы частными, потому что объект такого класса разрешается создавать только статическим методом класса. Могу ли я также объявить деструкторы таких классов приватными, чтобы они были симметричными, безопасно ли это?
EDIT: Хорошо, похоже, что это просто невозможно:
Fatal error: Call to private AClass::__destruct() from context '' in /script on line 0
(контекст пуст, и нет такой строки, как строка 0). По какой-то причине я привык думать, что среда выполнения PHP всемогуща и может уничтожить все, что она хочет.
Ответы
Ответ 1
В php магический метод __destruct
должен быть public
. Метод будет автоматически вызван извне к экземпляру. Объявление __destruct
как protected
или private
приведет к предупреждению, и метод magic не будет вызываться.
Нет никакой симметрии, поскольку вы никогда не должны явным образом вызывать __destruct
.
Ответ 2
Кажется, что вы используете одноэлементный шаблон. В этом шаблоне конструктор должен быть закрытым, и у вас есть статический метод, возвращающий экземпляр класса. Если нет экземпляра, этот статический метод создаст его и вернет его.
Если вы устанавливаете доступ деструктора к закрытому, вы не разрешаете другим классам или функциям уничтожать этот экземпляр, и это может быть непоследовательным, если в момент выполнения вашего приложения вы больше не будете использовать этот экземпляр. Нет никаких причин, чтобы установить деструктор в закрытый, потому что даже если он общедоступный, статический метод способен возвращать новый экземпляр, если его нет.