![]() |
![]() ![]() |
![]() |
-edekk- |
![]()
Post
#1
|
Goście ![]() |
Witam,
Chciałbym napisać pewną część swojego edukacyjnego projektu w ujęciu obiektowym. Korzystam z bazy danych MySQL, więc nie muszę pisać klasy obsługującej tę bazę osobno, tylko chcę skorzystać z wbudowanej klasy mysqli. Mam jednak problem już na starcie, bo nie wiem, jak ta klasa może być dziedziczona w innych. Przykładowo mam klasę: Kod class Przykladowa_klasa ( ) w której chciałbym wykonać pewne operacje na bazie danych. Jak w takiej sytuacji zainicjować dziedziczenie mysqli? Wpisać po prostu Przykładowa klasa extends mysqli? Czy jeśli taki zabieg jest możliwy, to w jaki sposób tworzy się egzemplarz klasy wewnątrz tej Przykładowa_klasa? Jeśli wywołuję mysqli w innym miejscu, wystarczy, że wpiszę: Kod $polaczenie = @new mysqli('host', 'uzytkownik', 'haslo', 'nazwa bazy'); czy można użyć tego podobnie wewnątrz innej klasy (chodzi o operator new). Jeśli tak to gdzie najlepiej to zrobić? Jednocześnie chciałbym zadać jeszcze kilka innych pytać związanych z php obiektowym. Analizowałem sobie przez pewien czas kod obiektowy z różnych źródeł, gdzie jest on umieszczany bezpłatnie i nie rozumiem pewnych mechanizmów często stosowanych (przepraszam, jeśli pytania sa lamerskie, ale niestety w książkach które przerabiam jest ogólny zarys idei OOP, a w praktyce napotykam na niezrozumiałe fragmenty), np. Kod class klasa1 { public $imie; public $nazwisko; function __construct($imie,$nazwisko) { $this->imie=$imie; $this->nazwisko=$nazwisko; } function wyswietl() { echo " klasa 1"."\n"; echo "$this->imie"."\n"."$this->nazwisko"."\n"; } } Nurtuje mnie to, co się dzieje w konstruktorze. Kumam kod do momentu, kiedy po odwołaniu się do pól $imie, $naziwsko wewnątrz klasy za pomocą $this, przypisuje sie je do zmiennej $imie jeszcze raz za pomocą operatora "=". Czy ktoś mógłby mi wytłumaczyć dlaczego stosuje się taki zabieg? Ponadto chciałbym zapytać, czy zmienne w metodach danej klasy mogą przyjmować za swoje parametry tylko zmiennie wcześniej zadeklarowane jako metody klasy, czy także zmienne niezwiązane z klasą i pochodzące z innej części skryptu? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jak w takiej sytuacji zainicjować dziedziczenie mysqli? Wpisać po prostu Przykładowa klasa extends mysqli? Tak. Przykładowy kod:
Klasa PrzykladowaKlasa zawiera teraz całą funkcjonalność klasy MySQLi ( http://pl2.php.net/manual/pl/class.mysqli.php ) Jeśli natomiast funkcjonalność oferowana przez klasę MySQLi ci nie wystarcza, to dodajesz sobie własne metody:
Jeśli utworzysz w swojej PrzykladowejKlasie metodę, która jest już zadeklarowana w klasie MySQLi, to zasłoni ona metodę klasy rodzica. Tyczy się to także konstruktorów i destruktorów. Na przykład jeśli chcesz mieć w swojej klasie konstruktor, a zarazem chcesz wywoływać konstruktor klasy MySQLi, musisz wywołać go ręcznie:
Tak w skrócie wygląda dziedziczenie. Ty najprawdopodobniej jednak nie potrzebujesz dziedziczenia, a zwykłego przekazania obiektu do klasy. Przykład:
-------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
-nickkk- |
![]()
Post
#3
|
Goście ![]() |
Dziękuję za szybką odpowiedź. Prawie zrozumiałem, nawet przepisałem niektóre fragmenty strony, ale mam problem z wykorzystaniem odziedziczonej klasy w potomku. Mam klasę A:
Kod class A extends MySQLi { //jakies metody } Podczas tworzenia instancji klasy A wykonuję zapytania na bazie danych i wszystko działa no. : Kod $rejestracja = new Rejestracja($db_host, $db_user, $db_haslo, $db_name) $sql = "SELECT * FROM users WHERE u_login = BINARY '$login'"; $zapytanie = $rejestracja->query($sql); $row = $zapytanie->num_rows; I wynik jest prawidłowy. Nie wiem jednak jak wykonać podobną operacją wewnątrz klasy A jako metodę (gdybym np. chciał stworzyć osobną metodę sprawdzająca czy użytkownik istnieje). W jaki sposób wykonać takie zapytanie wewnątrz klasy? Mam taką metodę ale ona nie działa: Kod class A{ $this->db_uchwyt = $db_uchwyt; $this->db_sql = $db_sql; $this->num_rows = $num_rows; $this->login = $login; public function row_login($db_sql, $db_uchwyt, $login){ $db_sql = "SELECT * FROM users WHERE u_login = BINARY '$login'"; $db_uchwyt->query($db_sql); $num_rows = $db_uchwyt->num_rows; } } do tego problem jest taki, że przy próbie odwołania do tej metody ($this->row_login($db_sql, $db_uchwyt, $login)) w innej metodzie wewnatrz klasy wyskakuje blad: Kod Fatal error: Call to a member function query() on a non-object in C:\Program Files\WebServ\httpd Błąd wskazuje na linię z $db_uchwyt; |
|
|
-nickkk- |
![]()
Post
#4
|
Goście ![]() |
Witam,
Problem już został rozwiązany. Polegał na błędach, głównie w odwoływaniu się do obiektów. Temat nieaktualny. Pozdrawiam! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 04:42 |