Я обнаружил, что делаю это в своем коде, чтобы «кэшировать» работу, проделанную при создании экземпляров моих моделей Zend_Db_Table
:
if (Zend_Registry::isRegistered('x_table')) {
$x_table = Zend_Registry::get('x_table');
} else {
$x_table = new Default_Model_DbTable_X;
Zend_Registry::set('x_table', $x_table);
}
Меня беспокоило, что этот метод не очень СУХОЙ, и сегодня меня осенило, что одноэлементный шаблон, вероятно, был бы лучшим способом сделать это. Проблема в том, что я никогда не писал одноэлементный класс. Когда я провел поиск в Интернете, я нашел несколько небрежных комментариев о Zend_Db_Table
синглтонах, но не нашел реальных примеров.
У меня уже настроено кэширование метаданных.
- Как мне сделать мои
Zend_Db_Table
модели синглтонами? - Есть ли подводные камни или недостатки?
Редактировать: Причина, по которой я решил, что ответом является синглтон, заключается в том, что я думал, что могу просто иметь следующие вызовы в своем коде $x_table = new Default_Model_DbTable_X;
, и единственный экземпляр будет возвращен, если он существует. Если это возможно, я бы предпочел это решение.