Ocena Klasy do zadań MySQL

2010-11-21 17:43:03 Post #1 programista

 
Proszę o ocenę i krytykę mojej pierwszej klasy:

<?php
class mySQL
{
    private $connection;
    private $selectedDb;
    private $result;
    private $isConnected;
    
    function __contruct()
    {
        $this->connection = false;
        $this->selectedDb = false;
    }

    final function connect($host, $user, $password, $db_name, $const = false)
    {
        if ($const)
            $this->connection = @mysql_pconnect($host, $user, $password);
        else
            $this->connection = @mysql_connect($host, $user, $password);

        if ($this->connection)
        {
            $this->isConnected = true;
            if ($this->selectDb($db_name))
                $this->selectedDb = true;

            return true;
        } else
            $this->printError();

        return false;
    }

    final private function selectDb($name)
    {
        if ($this->isConnected)
            if (@mysql_select_db($name))
                return true;
            else
                $this->printError();
        return false;
    }

    final function query($sql)
    {
        if ($this->selectedDb)
        {
            $this->result = mysql_query($sql);
            if ($this->result)
                return true;
            else
                return false;
        }
    }

    final function fetchAssoc($sql = '')
    {
        if ($this->selectedDb)
        {
            if (!$this->result)
                $this->query($sql);

            $rows = array();
            while ($row = mysql_fetch_assoc($this->result))
                $rows[] = $row;
            return $rows;
        }
    }

    final function getRow($sql = '')
    {
        if ($this->selectedDb)
        {
            if (!$this->result)
                $this->query($sql);

            return mysql_result($this->result, 0, 0);
        }
    }

    final function selectNumRows($sql = '')
    {
        if ($this->selectedDb)
        {
            if (!$this->result)
                $this->query($sql);

            return mysql_num_rows($this->result);
        }
    }

    final function close()
    {
        if ($this->selectedDb)
            if (mysql_close())
                return true;
            
            return false;
    }

    final function insert()
    {
        if ($this->selectedDb)
            return mysql_insert_id();
            
        return 0;
    }

    final private function printError($exit = false)
    {
        echo "<div style=\"font-family:Verdana; font-size:11px; text-align:center; font-weight: bold;\">Nie mozna ustanowic polaczenia z baza danych MySQL<br />".mysql_errno()." : ".mysql_error()."</div>";

        if ($exit)
            exit();
    }
}

$sql = new mySQL;
$sql->connect('localhost', 'root', 'pass', 'base');
$sql->query("ZAPYTANIE");
$sql->close();
?>

2010-11-22 07:27:25 Post #2 nospor

 
Na pierwszy rzut oka nie podoba mi się printError()
1) Taka klasa nie powinna generować kodu html
2) Nie powinieneś narzucać użytkownikowi sposobu wyświetlania błędu. Klasa powinna zwracać błąd a programista sam zadecyduje co z tym błędem zrobi

2010-11-22 12:25:19 Post #3 gość_jamello

 
O Do czego mozna zastosować taka klasę..?

2010-11-22 13:03:16 Post #4 nospor

 
Do nawiązania połączenia z bazą, wykonania zapytania i pobrania wyników bez tych wszystkich mysql_connect, mysql_query i mysql_fetch_array
Jest to bardzo prosta wersja klasy i przydaje się głównie na początkowym etapie nauki.

2010-12-05 21:48:14 Post #5 gość_Comandeer

 
Tak. Na bardzo początkowym etapie. Jak już zostało wspomniane, funkcja printError to strzał w stopę. $exit powala mnie ostatecznie.
1) connect można by zrobić jako konstruktor
2) zamiast przestarzałego mysql można się pokusić o stosowanie mysqli - interfejs obiektowy bardziej do mnie przemawia. Rajem byłby PDO
3) wszystkie metody są zdefiniowane jako final - nie łatwiej zdefiniować klasę jako final?
4) co to za funkcja selectDB? Potrzebny jest do tego taki rozwlekły wrapper? Poza tym nagle mogę sobie chcieć zmienić bazę - muszę tworzyć nowy obiekt mySQL, ponieważ metoda jest prywatna
5) to samo close - potrzebny taki rozległy wrapper? Close można równie dobrze przerzucić do destruktora
6) zamiast babrać się z tymi ifami i printErrorami nie lepiej pobawić się wyjątkami?
7) klasyczne czepianie się, ale czy nie ma przypadkiem 'MySQL' zamiast 'mySQL'?

2011-04-19 18:15:16 Post #6 gość_JHHA

 
CZYM JEST printError($exit = false)

2011-04-19 18:46:14 Post #7 user76

 
Nie lepiej będzie zmienić nazwy metod: z connect na __construct i z close na __destruct?

Odpowiedz

Ostatnio na forum

  1. PHP Developer - Gdań... moze kobieta
  2. PHP Developer - Gdań... Tomek ARforce
  3. Hackathon Distribute... aleksandra_c
  4. Klasa obsługi szablo... freeboc
  5. PHP [Symfony] Develo... NewPerspective
  6. [Wrocław][PHP Develo... Software house Amsterdam Standard sp. z o.o.
  7. Senior PHP Developer... Kingit

Skrypty użytkowników

  1. Klasa obsługi szablo... Lirdoner
  2. Sekcje user76
  3. Klasa walidująca for... user76
  4. Licznik Gości online korey
  5. Form Builder Comandeer
  6. Dynamiczny licznik z... korey
  7. Captcha Comandeer