private static мы не можем удалить снаружи по определению, и с этим поделать ничего нельзя. Максимум, что мы можем — добавить метод unsetInstance() { unset(self::$instance) } (я это имел в виду)
кстати, реализация класса БД в виде синглтона — не лучшая идея.
>> я не думаю что стоит спорить должен это быть static или const
В больших проектах это важно. Про const мы знаем, что никакой «орел» не поставит заглушку, меняющую «псевдоконстанту», из-за которой возникнет ошибка в логике (например, ошибочный посчет суммы крупного заказа). Это вопрос скорее не технический, управленческий.
>> Делегирование тоже не всегда оправдано, например если большой класс использует туже БД только в одном своём методе, то делегировать БД в класс немного излишне
я имел в виду что класс C является контейнером для общих объектов приложения, юзается в любом месте:
C::$db->select()->[и тут вываливается автокомплишн]
Блокирование clone с помощью magic-метода не нужно, клонировать объект такого типа все равно не получится.
Думаю, что основной недостаток любых решений с использованием registry — это потеря типа. Для PHP это означает всего лишь потерю автокомплишна в ide, но это очень серьезный аргумент для того, чтобы отказаться от registry в пользу конструкций вида
final class C
{
/**
* Объект БД
*
* @var Zend_Db_Adapter_Pdo_Mysql
*/
public static $db;
…
…
}
Так они бьются в виндовой кодировке, в utf-8 за счет мультибайтовости частота вхождения глюков в строку два раза выше, то есть минимальный небитый сабж в два раза короче
кстати, реализация класса БД в виде синглтона — не лучшая идея.
В больших проектах это важно. Про const мы знаем, что никакой «орел» не поставит заглушку, меняющую «псевдоконстанту», из-за которой возникнет ошибка в логике (например, ошибочный посчет суммы крупного заказа). Это вопрос скорее не технический, управленческий.
unset(C::$db);
синглтон: unset(self::$instance)
Вот это совсем непонятно…
И почему не «const BYTE = 1;»?
я имел в виду что класс C является контейнером для общих объектов приложения, юзается в любом месте:
C::$db->select()->[и тут вываливается автокомплишн]
Думаю, что основной недостаток любых решений с использованием registry — это потеря типа. Для PHP это означает всего лишь потерю автокомплишна в ide, но это очень серьезный аргумент для того, чтобы отказаться от registry в пользу конструкций вида
final class C
{
/**
* Объект БД
*
* @var Zend_Db_Adapter_Pdo_Mysql
*/
public static $db;
…
…
}
Я обещал поднимать карму всем, кто будет писать адекватные топики по KDE4.