![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 17.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam zacząłem pisać własną klase, ale mam błędy:
Kod PHP to:
Proszę o pomoc! |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 44 Dołączył: 31.07.2011 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze w destruktorze powinieneś sprawdzać, czy jest zdefiniowana zmienna $handler np:
Nie przyglądałem się dokładnie kodowi klasy, więc nie wiem czy są jakieś błędy, ale sprawdź w kodzie, czy wywołujesz funkcje set() i connect()
Jeśli łączysz się tylko z jedną bazą, to ja bym te funkcje (tzn set() i connect() )wrzucił do konstruktora klasy mysql. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
jeżeli piszesz sobie klasę w celach edukacyjnych to ok, ale w praktyce lepiej będzie jeśli będziesz używał PDO, a tak na marginesie to nie logicznie to zrobiłeś, np. w metodach query_num i query_fetch nie powinno być wysyłania zapytania bo wysłaniem zapytania zajmuje się metoda query(), po drugie lepiej jakbyś zmienne do łączenia przesyłał w konstruktorze a trzymał je w pliku konfiguracyjnym
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 17.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Przerobiłem troszkę i dalej jest jeden błąd:
żadnych pomysłów? ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 44 Dołączył: 31.07.2011 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
O ile mi wiadomo to mysql_close() nie jest konieczne, gdyż połączenia są automatycznie zamykane na końcu skryptu. Być może to automatyczne zamknięcie następuje przed wywołaniem destruktora? Ale to tylko przypuszczenie, bo tak naprawdę to nie mam pojęcia w jakich kolejnościach co jest wywoływane.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 17.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Ja też nie orientuje się w kolejności wykonywania, ale wiem, że jak przeglądałem inną klase to było mysql_connect w destruktorze... Jakie mogą być skutki "uboczne" nie użycia funkcji mysql_connect()
? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 215 Pomógł: 44 Dołączył: 31.07.2011 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
Takie, że zasoby zostaną zwolnione dopiero po zakończeniu wykonywania się skryptu. PHP używam od kilku lat, co prawda nigdy nie pisałem nic tak wielkiego, że trzeba było bardzo dbać o pamięć, ale nigdy nie używałem mysql_close(). O ile się nie mylę to na php.net też chyba jest napisane, że używanie tej funkcji nie jest konieczne. Oczywiście to jest tylko moje zdanie, być może inni uważają inaczej.
Ten post edytował crocodillo 13.10.2011, 17:36:59 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 17.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
czyli jeśli nie korzystam z kilku baz danych na raz to nie muszę tego używać? to w sumie chyba sobie odpuszczę, choć wolałbym wiedzieć co nie tak, bo lepiej rozwiązać problem niż pominąć funkcję...
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 320 Pomógł: 29 Dołączył: 3.04.2010 Ostrzeżenie: (20%) ![]() ![]() |
Czy klasa "user" rozszerza klasę "mysql"? Nie, ona ją wykorzystuję. Poczytaj o różnicy między kompozycją a dziedziczeniem.
Natomiast co do błędu, sprawdziłbym czy resource jest zwracany z mysql_connecta. Masz włączone E_NOTICE? Moim pomysłem jest to, że dziedziczysz klasę mysql na user, w związku z czym wywołujesz zmienną PRYWATNĄ $this->handler. Tymczasowym uleczeniem tego będzie zmienienie modyfikatora $this->handler na protected. To tylko zaślepka, ponieważ kod jest do przepisania ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 23:17 |