![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Co myślicie o poniższym kodzie:
Niby wszystko działa tak jak chcę, ale w jaki sposób mam zabijać uchwyt do bazy? Czyste pdo niszczyłem poprzez $obiektPDO = null - A w tej chwili nie bardzo wiem jak to zrobić. Próbowałem wywołać destruktor PDO w destruktorze mojej klasy, ale okazało się, że PDO nie posiada destruktora. Nie chcę, żeby mi "zwisały" otwarte połączenia z bazą. Pamiętam, że przy standardowych połączeniach z bazą miałem z tym problem. Czasem zapominałem kończyć połączenia. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze ta klasa nie jest Singletonem ponieważ mozna utworzyć wiecej niż jedną jej instancję.
Po drugie brak deklaracji wlasciwosci statycznych Po trzecie gdyby to byl singleton to nie mialbys problemu ze "zwisającymi" otwartymi polaczeniami z baza bo byloby tylko jedno polaczenie. Po czwarte - destrukcja $obiektDB = null; i po sprawie |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Nie jest singletonem, bo php odmawia oznaczenia konstruktora jako prywatny.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
A czytales temat Singleton i dziedziczenie?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Czytałem. Z tego, co zrozumiałem w wersji 5.1.4 nie da się tego obejść.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Czytaj do konca. Poza tym nie zmienia to faktu, ze Twoja klasa zawiera bledy formalne. Poczytaj na temat implementacji wzorca singleton.
Pokaz mi jak uzywasz swojej klasy. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Chodzi Ci o wersję cvs?
W sumie czytałem o singletonach tutaj: http://webcity.pl/webcity/artykuly.php/t/62 O jakie błędy formalne Ci chodzi? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Spojrz na swoja klase i na sposob uzycia? Czy wszysko Ci tu pasuje? Poza tym przeczytaj jeszcze raz moj pierwszy post w tym temacie. -- edit -- Zobacz Singleton Ten post edytował bigZbig 21.07.2006, 12:28:06 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
elnino - po co stosujesz zmienna statyczna metody skoro w php5 mamy prywatne wlasnosci statyczne (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc. A jak w takim razie rozwiązać kwestię zabijania obiektu? Czy muszę używać "$dbr = null" ? Nie dałoby się tego prościej zrobić?
-- edit -- Fatal error: Access level to db::__construct() must be public (as in class PDO) in /XXX/class.Db.php5 on line 27 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
O co Ci chodzi z tym destruktorem? Obiekt Twojej klasy to pod wzgledem destrukcji taki sam obiekt jak kazdy inny i tak samo go traktuj.
Pokarz jak wyglada Twoja klasa po zmianach. Przetestuje ją u siebie. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Public, bo na private się sypie. I jeszcze jeden kłopot mam z innym kontruktorem. Klasa implementuje interfejs:
Dla powyższego kodu mam bląd: "Fatal error: Access level to page_view_action::__construct() must be public (as in class Action)" Jeśli zmienię w interfejsie konstruktor na prywatny dostaję błąd: "Fatal error: Access type for interface method Action::__construct() must be omitted" |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
1. Konstruktor klasy db musi byc publiczny poniewaz konstruktor klasy PDO jest publiczny (zapewne implementuje jakis interfejs, ktory tego wymaga).
2. W interfejsie definiuje sie jedynie metody publiczne. Do tego sluzy interfejs - chodzi o to, ze dany obiekt komunikuje sie ze swiatem zewnetrznym za pomoca metod publicznych. Dlatego nie mozesz w intefejsie zadeklarowac metody prywatnej lub chronionej. Wyrzuc konstruktor i destruktor z interfejsu. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki. Nadal jednak nie wiem co z tym zabiciem uchwytu do bazy danych. Czy muszę null'ować zmienną?
Ten post edytował elnino.pl 21.07.2006, 13:26:42 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zamiast Twojej klasy sprobuj tego (pisane z reki)
Co do niszczenia polaczenia. Skoro masz tylko jedno to pozwol mu zwyczajnie wygasnac przy zakonczeniu skryptu. -- edit -- Klasa db nie moze byc rozszerzeniem klasy PDO Ten post edytował bigZbig 21.07.2006, 13:35:13 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Niestety to samo.
A jeśli chodzi o niszczenie - kiedyś miałem kłopot, bo otwierałem połączeina mysql (standardowo) i na końcu ich nie zamykałem. Administrator serwera powiedział, że te wszystkie połączenia "wiszą" ciągle otwarte (pomimo tego, że nie były pconnect)... |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zrobilem poprawki zapomnialem usunac extends PDO
Patrz wyzej |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 125 Pomógł: 0 Dołączył: 17.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, gra i buczy!
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 03:58 |