Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Pytanie o klase mysqli, Czy klasa może być dziedziczona?
-edekk-
post
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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
-nickkk-
post
Post #2





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;
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 13:43