Programowanie obiektowe

Tutaj dyskutujemy o PHP oraz zgłaszamy i rozwiązujemy problemy dotyczące tego języka.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Programowanie obiektowe

Post przez tajger »

Sry, mogłem użyć opcji szukaj, a tak to przejrzałem tylko forum PHP i nie widziałem pojęcie Polimorfizmu. Następnym razem zrobię tak.
Zawsze walcz do końca i nigdy się nie poddawaj!
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Programowanie obiektowe

Post przez tajger »

1. Mógłbyś ocenić moje pierwsze połączenie do bazy danych obiektowo?

Code: Zaznacz cały

class db_mysql
{
    private $connect = NULL;
    
    public function connect($host, $login, $password, $database)
    {
        $this->connect = mysql_connect($host, $login, $password);
        
        if($this->connect)
        {
            mysql_select_db($database, $this->connect);
            mysql_set_charset("utf8", $this->connect);
        }
    }
    
    public function disconnect()
    {
        if(is_resource($this->connect))
            mysql_close($this->connect);
    }
}


$mysql = new db_mysql;
$mysql->connect("localhost", "root", "vertrigo", "test");
//a tutaj jest nasza całe ciało strony
$mysql->disconnect();
2. A co sądzisz, żeby np. przed każdym zapytaniem, które tworzymy sprawdzać czy połączenie mysql_connect() jest prawdziwe tj. true ? Chodzi mi o zapytania np. do bazy danych.
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Programowanie obiektowe

Post przez Morfidon »

1. Lepiej by było jeśli połączenie tworzyłbyś w raz ze stworzeniem obiektu, skorzystaj z konstruktora.
2. Możesz tak zrobić, jeśli chcesz, aby tak funkcjonowała Twoja klasa. Możesz np. wyrzucać wtedy wyjątek, a korzystać ze swojej klasy tworząc obiekty i resztę strony w block try{} catch(){} i w razie gdy wystąpi tak błąd zwrócić odpowiednią wiadomość i zakończyć wykonywanie skryptu.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Programowanie obiektowe

Post przez tajger »

Jedna linia na zewnątrz mniej. :D

Code: Zaznacz cały

class db_mysql
{
    private $connect = NULL;
    
    public function __construct($host, $login, $password, $database) 
    {
        
        $this->connect = mysql_connect($host, $login, $password);
        if($this->connect)
        {
            mysql_select_db($database, $this->connect);
            mysql_set_charset("utf8", $this->connect);
        }
    }

   
    public function disconnect()
    {
        if(is_resource($this->connect))
            mysql_close($this->connect);
    }
}


$mysql = new db_mysql("localhost", "root", "vertrigo", "test");
//całe ciało strony
$mysql->disconnect();
Czyli dalej się trzymamy tezy, że tylko raz otwieramy połączenie na stronie i na końcu dokumentu je zamykamy? Rozmawialiśmy chyba kiedyś o tym w którymś wątku. Czy jest to bezpieczne? Też nei widzę sensu, aby cały czas przed zapytaniem otwierać połączenie a potem po zapytaniu je zamykać.
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Programowanie obiektowe

Post przez Morfidon »

Tak. Gdybyś co chwilę zamykał i otwierał to robiłbyś niepotrzebnie połączenia i spowalniał skrypt.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Programowanie obiektowe

Post przez tajger »

Polimorfizm teraz.
1. Czyli dziedziczenie, rzutowanie lub przypisywanie nowych obiektów cechom w klasie jest polimorfizmem?
2. Na wikipedii jest wiele rodzajów polimorfizmów? O jakim mówimy w PHP, inkluzyjny?
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Programowanie obiektowe

Post przez Morfidon »

Jeśli nie masz odpowiadać przed kimś co to jest polimorfizm to pojęcie jest Ci zbędne. Najważniejsze by potrafić korzystać z tych dobroci.

Polimorfizm występuje wtedy gdy np. przeciążasz funkcje. Pod jedną nazwą funkcji możesz wywołać różne funkcje. Jest poly - morficzna. Jedna nazwa, a wiele możliwości.
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Programowanie obiektowe

Post przez tajger »

Ostatnio próbowałem stworzyć funkcję, która miała w sobie różne funkcje i chciałem się odwołać do nich za pomoca przekazania różnych argumentów. Nie wiem czy coś takiego istnieje wogóle i tak można, ale mi się nie udało. Udało by mi się tylko wtedy gdy argumenty głównej funkcji byłyby takie same jak argumenty tych funkcji zagnieżdżonych. Jak tu je wywołać? Chyba się nie uda i każdą funkcję trzeba będzie projektować osobno w klasie.
Zawsze walcz do końca i nigdy się nie poddawaj!
Morfidon
Administrator
Administrator
Posty: 1332
Dołączył(a): wtorek, 5 sierpnia 2008, 21:48
Contact:

Re: Programowanie obiektowe

Post przez Morfidon »

Wklej kod, bo nie do końca rozumiem o co Ci chodzi ;)
tajger
Zaawansowany
Zaawansowany
Posty: 223
Dołączył(a): niedziela, 11 marca 2012, 03:08
Lokalizacja: Poland
Contact:

Re: Programowanie obiektowe

Post przez tajger »

Np. coś takiego:

Code: Zaznacz cały

function wybierzZapytanie($idPolecenia)
{
    if($idPolecenia == 1)
    {
        function tworzZapytanieSelectAll($table)
        {
            $result = (mysql_query("SELECT * FROM ".$table));
            while($row = mysql_fetch_array($result))
            {
                echo "Id: ".$row['id']."<br />";
                echo "Login: ".$row['login']."<br />";
                echo "Haslo: ".$row['haslo']."<br />";
                echo "Rejestracja: ".$row['rejestracja']."<br /><br />";
            }
        }
    }
    else if($idPolecenia == 2)
    {
        function tworzZapytanieSelectOne($column, $table)
        {
            $result = (mysql_query("SELECT ".$column." FROM ".$table));
            while($row = mysql_fetch_array($result))
            {
                echo $column."".$row[$column]."<br />";;
            }
        }
    }
}
Chcaiłbym wywołać funkcję wybierzZapytanie a potem następnie wywołać następna funkcję i jej podac argumenty. Nie wiem jak tej drugiej funkcji podać te argumeny. Czy coś takiego można osiągnać, chyba raczej nie. Pewna kwestia która może rządzić to rekurencja, ale jej nie użyłem. :D Chyba odpuszcze sobie takie cyrki z takimi pomysłami i cudowaniem.
Zawsze walcz do końca i nigdy się nie poddawaj!
Post Reply