![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 1 Dołączył: 19.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Mam plik z klasą baza są tam fukcje(polacz,zamknij itd) do obsługi bazy danych. Robię panel też na klasach. W każdej klasie muszę dziedziczyć klasę baza. ( class cmsArtykuly extends baza{ }) Chodzi oto ze za każdym razem kiedy wykonywana jest jakaś klasa. konstruktor i destruktor łaczy się i rozłancza z bazą co nie jest za wydajne.
Moje pytanie: czy da się to zrobić zeby połaczenie się trzymało i nie trzeba było za każdym razem ładzyć się i rozłanczać |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ogromny błąd, który popełniasz to dziedziczenie za każdym razem po tej klasie.
Nie rób tego. To postępowanie jest pozbawione sensu. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Zła metoda, zdecydowanie. Powinieneś na początku utworzyć jeden obiekt łączący się z bazą, później w określony sposób przekazywać jego instancję do każdego innego obiektu wymagającego połączenia z bazą.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 1 Dołączył: 19.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Może ktoś podać przykład takiego rozwiązania?
Albo jakieś wskazówki. ? |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 1 Dołączył: 19.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Czy to nie jest ten sam sposób co wyżej? i co ma być(obiekt czy co) w $polaczenie_z_baza
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 4 Dołączył: 22.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
skorzystaj z singletona, wtedy bedziesz mial jedna instancje klasy
|
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Czy to nie jest ten sam sposób co wyżej? i co ma być(obiekt czy co) w $polaczenie_z_baza $polaczenie_z_baza to obiekt klasy (w Twoim przypadku) baza. Rozwiązanie jest na tyle inne że tworzysz obiekt (który łączy się z bazą) tylko raz, a później przekazujesz go każdej potrzebującej klasie.Klasa kiedy dostała obiekt, już nie musi łączyć się z bazą tylko takie połącznie pobrać przekazanego obiektu. Na przykład: i na połącznieu działać dalej. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 654 Pomógł: 17 Dołączył: 19.03.2006 Skąd: z kosmosu ;) Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj w sesji zapisywać stan połączenia z bazą danych, jeśli połączenie jest aktywne to nie zostanie ponownie ustanowione oraz zamknięte.
A na końcu kodu będziesz musiał niestety sam zamykać połączenie, chyba że piszesz w OOP to nie będziesz miał problemu. @edit Jak widzisz lepsze rozwiązanie, to je przedstaw (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Sesja jako global też może być @edit Nie serializować! Tylko zapisywać że jest połączenie... Gdy łączysz się poprzez mysql_connect() to połączenie jest GLOBALNE. Dziękuję, Babcia@Stefa Ten post edytował Babcia@Stefa 25.06.2008, 20:23:36 |
|
|
![]()
Post
#10
|
|
Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
LOL, w sesji?
- albo nie wiesz ze nie da sie polaczenia z baza zaserializowac - albo chcesz $_SESSION jako globala uzywac |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 1 Dołączył: 19.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem tak jak mówiliście:
na początku index.php:
w pliku cmsDokumenty.php
w pliku pokazDokumenty.php:
i error Call to a member function zapytanie() on a non-object in [....]/cmsDokumenty.php Ten post edytował metalog 26.06.2008, 07:42:38 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
A gdzie konstruktor tej klasy, co przechwytuje obiekt bazy?
PHP4:
PHP5:
i wywal to : $baza->zamknij(); na końcu. Nie musisz ręcznie zamykać połączenia. Ten post edytował l0ud 26.06.2008, 11:15:42 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 1 Dołączył: 19.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jest ok już nie wyświetla się błąd ze niema funkcji zapytanie lecz nie zwraca mi ta funkcja wyników :| nie wiecie czemu tak może być? pewno to związane jest z obiektem baza.
|
|
|
![]()
Post
#14
|
|
Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Widzisz tam gdzieś return w tej funkcji? Ja nie, więc pewnie dlatego nic nie zwraca.
Pozdrawiam. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 92 Pomógł: 3 Dołączył: 4.04.2006 Ostrzeżenie: (0%) ![]() ![]() |
a czy mozna w ten sposob, tzn czy to jest bezpieczna metoda polaczenia z baza
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 535 Pomógł: 27 Dołączył: 3.05.2005 Ostrzeżenie: (20%) ![]() ![]() |
Wydaje mi się że Twoja aplikacja jest źle zaprojektowana i tym samym źle napisana.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Hmm, trzymaj takie rzeczy (jak baza, obsługa błędów, języki itd.) "globalnie". Czyli tak, żebyś miał do tego dostęp wszędzie. Ja przekazuje je do głównego kontrolera, który dodaje ich instancje przy tworzeniu klasy akcji np.
To tylko taki przykład, ale powinieneś mieć dostep do bazy tam gdzie potrzebujesz. Nie rób nic na globalu, bo nie ma sensu dawać całej aplikacji dostęp do bazy. :] |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 1 Dołączył: 19.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mam takie cos:
Wywołanie:
I wyskakuje mi Fatal error: Cannot access empty propert Ten post edytował batman 2.07.2008, 10:55:45
Powód edycji: poprawiłem bbcode
|
|
|
![]()
Post
#19
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Jak cytujesz błed to cytuj go w całości, bo przez niewiedzę możesz obciąć najbardziej istotne informacje.
A co do kodu. Odwołujesz się do pola klasy $baza w sposób publiczny a zmienna ta została zadeklarowana jako prywatna. To błąd. Poza tym dlaczego nie przekazałeś bazy w konstruktorze? Przecież po to chyba go tak skonstruowałeś. Poza tym piszesz niechlujnie. Raz dobrze: $this->baza->... raz źle $this->$baza->.... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 00:48 |