|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||||||||||||||||
Объект класса с подключением PDO11.12.2013, 12:57. Показов 7556. Ответов 43
Метки нет (Все метки)
Есть класс для подключения с БД (используется PDO). В этом же классе есть основные ф-ии для работы с БД.
Подключаюсь нормально. Теперь при попытке обратиться к методу этого класса, у меня выходит ошибка.
Вот класс
0
|
||||||||||||||||
| 11.12.2013, 12:57 | |
|
Ответы с готовыми решениями:
43
Расширение класса PDO
|
|
Иллюзионист
154 / 153 / 27
Регистрация: 02.10.2013
Сообщений: 330
|
|
| 12.12.2013, 20:40 | |
|
Автолоад. Хм. Никогда не пользовался. Судя по описанию, он подгружает только классы, чье имя соответствует имени файла. Т.е. из model.php он найдет только class Model. Я неправ?
0
|
|
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||
| 12.12.2013, 21:45 | ||
|
2
|
||
|
Иллюзионист
154 / 153 / 27
Регистрация: 02.10.2013
Сообщений: 330
|
|
| 12.12.2013, 21:54 | |
|
Удобная вещь autoload, разобрался. Спасибо. Всем
![]() И нет, я неправ. Почитал, потестил. Это просто обертка над include-require, исполняет весь файл. И, кстати, кажется, нашел проблему. У меня-то PHP 5.3. Общие изменения относительно статических свойств. Как раз с 5.3. Хотя и он уже устаревает, 5.5 нужно брать)
1
|
|
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
|
| 12.12.2013, 22:00 [ТС] | |
|
0
|
|
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||||||
| 12.12.2013, 22:06 | ||||||
|
все лень перечитывать, но..
Ошибка в том, что синглтон должен быть проинициализирован. Т.е., в любом случае, объект должен быть создан, просто создать возможно только один объект. Поэтому надо внутри либо использовать
0
|
||||||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
|||||||||||
| 12.12.2013, 22:17 [ТС] | |||||||||||
|
KOPOJI, если я правильно тя понял, внутри класса Pi_DB для получения экземпляра этого же класса, нужно писать self::Instance() ?
сделал
0
|
|||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||
| 12.12.2013, 22:19 | |||
|
0
|
|||
|
Иллюзионист
154 / 153 / 27
Регистрация: 02.10.2013
Сообщений: 330
|
|||||||||||
| 12.12.2013, 22:19 | |||||||||||
|
Зоопарк... 5.3, 5.4, 5.5. Теперь еще и 5.2.
Да, выловил твою ошибку. Pi_DB нельзя передать, оставив синглтоном. Обращаться только через имя класса. Т.е. не прокатит
Повторяешь ту же ошибку! в self::instance ты заносишь экземпляр класса PDO. Это не ссылка на сам Pi_DB
0
|
|||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||
| 12.12.2013, 22:21 | ||
|
0
|
||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||||||
| 12.12.2013, 22:53 [ТС] | ||||||
|
philin, не получается
здесь
![]() а так ч/з self::Instance() вроде работает, но мне нужен синглтон!!! Ребята представьте мне окончательный вариант подключения к БД с помощью PDO синглтон. полностью запутался
0
|
||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
||
| 12.12.2013, 23:22 | ||
|
0
|
||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||
| 12.12.2013, 23:31 [ТС] | ||
|
нужен одиночка, просто покажите как правильно
0
|
||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|
| 12.12.2013, 23:34 | |
|
я же уже сказал. Нужно закрыть все методы, через которые можно так или иначе создать объект. __construct, __clone, __wakeup, __sleep должны быть закрытыми. Объект создаете с помощью статического метода. Все
0
|
|
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||||||||||||||||
| 13.12.2013, 00:38 [ТС] | ||||||||||||||||
|
так, мужики, представляю на ваш суд окончательный вид класса и его вызова в рабочем варианте.
Скажите, это правильная реализация синглтона? Вот класс
![]() Добавлено через 5 минут код philin'a, я так и не смог настроить( philin, если у тя работает, скинь обратно архив, посмотрю реализацию
0
|
||||||||||||||||
|
Почетный модератор
16844 / 6725 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
|
|||
| 13.12.2013, 07:55 | |||
|
Добавлено через 51 секунду
0
|
|||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
|||
| 13.12.2013, 11:31 [ТС] | |||
|
0
|
|||
|
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
|
|||||||||||
| 13.12.2013, 12:06 | |||||||||||
![]() А константы PI_HOSTNAME и пр. где определены? Вобщем я занимался чем-то подобным и совсем не давно. Сделал следующее: Конфигурационный yml файл, в котором в том числе была конфигурация подключения к базе данных. Чтобы была возможность динамического свитчинга баз данных/хостов/пользователей (чего у вас не получится) сделал алиасы соединений, каждый из которых содержал в себе набор host/username/password/dbname и еще всякие настройки. Я все это к чему, у вас получается только одно соединение. КОнечно, в большинстве случаев этого достаточно, но не всегда. Если вы хотите сделать универсальную штуку, то наверное стоит вынести из __construct() подключение в отдельный метод типа connect(), завести аттрибут - менеджер соединений (а в идеале отдельный класс, только тогда он будет синглтоном, а не Pi_Db) и в каком-нибудь виде конфигурации. Как это было сделано у меня (примерно): Класс контейнер для активных соединений, ConnectionManager(). КЛасс - синглтон. КЛасс самого соединения Connection(). Создается через спциальный метод в классе ConnectionManager() В конструкторе Connection() прием данных для подключения username/password/database etc В конечном итоге выглядело примерно вот так:
Вобщем тут широкие просторы для воображения
1
|
|||||||||||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||||||||
| 13.12.2013, 12:56 [ТС] | ||||||||
|
Не мог бы ты написать зависимости твоих классов (имеется в виду - классов БД) схематически, примерно так
0
|
||||||||
|
91 / 91 / 23
Регистрация: 02.09.2013
Сообщений: 276
|
||||||
| 13.12.2013, 13:49 | ||||||
|
Щас попробую вспомнить ... исходники гдето дома валяются
Сам Query() это класс наподобие Criteria() в симфони (первой) и CdbCriteria() в уии. В двух словах это конструктор для сборки запросов, то есть имеет методы, скажем, ->oder(); ->group(); ->limit(); ->join(); и т. д. А вот как лучше прикрутить этот конструктор к модели это другой вопрос. Но это, впрочем, уже другая тема.
1
|
||||||
|
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
|
||
| 13.12.2013, 18:11 [ТС] | ||
|
люблю развернутые ответы
В Configuration() находятся настройки только БД? Я как понимаю, у меня класс Pi_DB включает в себя 2 последних класса у тя в списке, так? Еще, я чиатл, что чем меньше классов, тем лучше, а то, что для подготовки системы нужно мин. 4 класса - это разве не борщ?
0
|
||
| 13.12.2013, 18:11 | |
|
Свойству класса присвоить объект другого класса Объект класса
Не передаются значения в объект класса Получить объект класса по имени Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|