Можно ли объявить деструктор приватным?

Некоторые из моих классов объявляют свои конструкторы частными, потому что объект такого класса разрешается создавать только статическим методом класса. Могу ли я также объявить деструкторы таких классов приватными, чтобы они были симметричными, безопасно ли это?

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

Кажется, что вы используете одноэлементный шаблон. В этом шаблоне конструктор должен быть закрытым, и у вас есть статический метод, возвращающий экземпляр класса. Если нет экземпляра, этот статический метод создаст его и вернет его.

Если вы устанавливаете доступ деструктора к закрытому, вы не разрешаете другим классам или функциям уничтожать этот экземпляр, и это может быть непоследовательным, если в момент выполнения вашего приложения вы больше не будете использовать этот экземпляр. Нет никаких причин, чтобы установить деструктор в закрытый, потому что даже если он общедоступный, статический метод способен возвращать новый экземпляр, если его нет.