![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cześć, mam problem z własną klasą do obsługi bazy.
Tymczasowo mam tylko samo połączenie, ale docelowo chciałbym w tej klasie zamieścić uniwersalne metody do wykonywania select'ów / update'ów / etc. Kod mojej klasy:
I teraz jak próbuje jej użyć:
to dostaje komunikat: Fatal error: Call to undefined method DB::query(). Może mi ktoś wskazać gdzie popełniam błąd? Z góry dzięki za pomoc! |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Jak już to rozszerz sobie PDO
Kod class DB extends PDO i wtedy dodaj tam singletona. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 890 Pomógł: 65 Dołączył: 13.11.2005 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Cytat Call to undefined method DB::query() A co niejasnego jest w tym komunikacie? ![]() @up: Ano Ten post edytował drPayton 16.03.2009, 00:26:07 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jak już to rozszerz sobie PDO Kod class DB extends PDO i wtedy dodaj tam singletona. No tak, ale w takim przypadku (class DB extends PDO) nie mogę zablokować konstruktora (private function __construct() {}) bo krzyczy mi błędem (Access level to DB::__construct() must be public (as in class PDO)). Jak w takim przypadku zabezpieczyć klasę przed możliwością tworzenia obiektu? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
A po co blokować konstruktor? Dopóki tylko ty korzystasz z tego kodu to nie ma takiej potrzeby.
Albo drugie wyjście, zamiast new self daj new PDO(...). Ale to już będzie mniej zgodne z wzorcem. Ten post edytował Mephistofeles 16.03.2009, 10:25:43 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 16.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Tak się dziś cały dzień zastanawiam nad powyższym rozwiązaniem i wymyśliłem taką mieszankę singeltona i klasy statycznej (o ile można tak to nazwać
![]()
I potem wystarczy tylko tyle do użycia:
Co sądzicie o takim rozwiązaniu? Ma rację bytu czy raczej przekombinowane? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Ja bym powiedział tak:
Albo klasa statyczna albo nie. Jeżeli masz metody "niestatyczne" to singleton'a robisz tak:
i tworzysz potem obiekt klasy $test = nazwaklasy::sing(); Ten post edytował fifi209 17.03.2009, 14:35:31 -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 08:41 |