![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
1. для того чтобы использовать pdo как синглтон класс обязательно нужно обертку писать или я просто плохо документацию читал?
2. заметил различия в аргументах конструктора для mysql и pgsql. с чем это связано? а пока что использую вот такой фантик. просьба попинать.
|
|||
|
||||
| awers |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1465 Регистрация: 22.3.2006 Где: Россия, Таганрог Репутация: нет Всего: 31 |
Оо первый принцип синглетона - отсутствие __construct... замени его к примеру на init()
Почему static $_instance находится внутри public static function getInstance ? Даже если это работает - это муветон |
|||
|
||||
| ST_Falcon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
awers,
точнее не отсутствие __construct(), а отсутствие доступа к нему. хотя в целом ты прав. просто сначала это был Singleton/Adapter, с private __construct(). но потом мне надоело переписывать стандартные методы и я наследовал PDO, а так как в PDO конструктор public, то у потомка тоже пришлось сделать его public. в общем провтыкал. ок. это я переделаю.
ну конечно работает, это ведь статическая переменная. а почему муветон? мне так кажется более удобным. в примерах Singleton паттерна я видел оба варианта (php, с++/c#). |
||||
|
|||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
Эта статическая переменная доступна только в ф-ции getInstance, а она, вероятно, может понадобиться в других методах класса, потому лучше вынести в ее в класс. |
|||
|
||||
| ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
flashaa,
Но ведь getInstance инициализирует и возвращает объект класса. В других методах используем просто this или self. Честно говоря не могу представить другие методы в которых может понадобиться $_instance... |
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
ST_Falcon, вы на начальном этапе себя ограничиваете тем, что к члену с объектом имеет доступ только метод getInstance. Вот для чего вам это? Чего вы добьетесь ? Я честно говоря никогда не видел такого хранения.
Примера злободневного привести не могу. Вспоминается мне то, что в классе для подключений к БД у меня однажды синглтон перерос в т.н. мультисинглтон - несколько объектов. Т.к. подключение могло быть к разным серверам БД и у меня было принято решение хранить отдельный объект для разных сочетаний юзер+хост. Тут уж self и this не поможет, т.к. нужно хранить несколько объектов. Хотя вообщем думаю и тут можно было бы все это сокрыть внутри getInstance... Вообщем наверно никакого примера привести не могу... Просто интересует, зачем сокрыть внутри метода и ограничивать доступ к члену из других методов ? Это сообщение отредактировал(а) flashaa - 19.4.2008, 21:59 |
|||
|
||||
| ST_Falcon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 14.11.2003 Где: Львов Репутация: нет Всего: 1 |
flashaa, инкапсуляция
а если серьёзно, то никаких объективных причин на это у меня нету. но и моветоном я это не считаю. ps. думаю, что если бы мне нужно было держать несколько коннектов, тогда я бы ещё одну обертку написал. |
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 2 Всего: 25 |
ST_Falcon, я тоже не считаю моветоном, просто вижу возможные ограничения в будущем.
По поводу разных форматов DSN, вероятно потому что драйверы к каждому движку БД разрабатывались раздельно, вот и разошлись в стандартах. |
|||
|
||||
| MrZLO |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 9.10.2008 Репутация: нет Всего: нет |
тут конструктор закрытый сделать не получится, т.е. класс наследуется от PDO
Access level to Database::__construct() must be public (as in class PDO) обёртку с "одиночкой" (синглтон) можно так делать http://www.apprendre-php.com/tutoriels/tut...egrant-pdo.html Это сообщение отредактировал(а) MrZLO - 11.3.2009, 12:25 |
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 7 Всего: 140 |
MrZLO, смотри на дату темы, прошел почти год. автор давным-давно нашел решение
-------------------- Amazing |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |