un consiglio database class OOP

  • Creatore Discussione Creatore Discussione shivi
  • Data di inizio Data di inizio

shivi

Nuovo Utente
14 Feb 2012
25
0
0
volevo chiedere per togliere il mio dubbio perchè è da poco che programmo OOP ho creato una semplice database class ma secondo voi può essere considerato abbastanza meglio una classe gestita in questo modo o non tanto c'è qualche errore grazie mille
PHP:
class phpWbDatabaseConnection {
    // Decclass variables
    private $localhost_server;
    private $host_user;
    private $host_pass;
    private $host_db;
    public $web_db_con = null;
    protected $login_query;
    protected $login_query_result;

    public function __construct($localhost,$user,$pass,$db) {
        $this->localhost_server = $localhost;
        $this->host_user = $user;
        $this->host_pass = $pass;
        $this->host_db = $db;
        
        if(isset($this->localhost_server) && isset($this->host_user) && isset($this->host_pass) && isset($this->host_db)){
            return $this->connect_To_Database();
        }
        
    }
    
    public function connect_To_Database(){
        if($this->web_db_con == null){
            $this->web_db_con = mysqli_connect($this->localhost_server, $this->host_user, $this->host_pass, $this->host_db);
            if($this->web_db_con){
                return true;
            }else{
                return mysqli_connect_errno();
            }
        }
    }
    
    public function select_db(){
        if($this->web_db_con != null){
            if(!mysqli_select_db($this->web_db_con, $this->host_db)){
                return mysqli_error($this->web_db_con);
            }
        }
    }
    
}
 
Ultima modifica di un moderatore:
In PHP i costruttori non possono restituire valori perché restituiscono sempre un'istanza della classe. Per gestire gli errori nella programmazione orientata agli oggetti si usano le eccezioni.

Inoltre, esporre la proprietà web_db_con non è una grande idea, perché l'utente potrebbe modificarla arbitrariamente, e non vedo perché dovrebbe essergli permesso.

In sintesi, ecco come l'avrei scritta io (usando, tra l'altro, l'interfaccia a oggetti di MySQLi):

PHP:
<?php

class DatabaseConnection
{
    private $hostname;
    private $username;
    private $password;
    private $database;

    private $mysqli;

    public function __construct($hostname, $username, $password, $database)
    {
        $this->hostname = $hostname;
        $this->username = $username;
        $this->password = $password;
        $this->database = $database;

        $this->connect();
    }

    public function getHostname()
    {
        return $this->hostname;
    }

    public function getUsername()
    {
        return $this->username;
    }

    public function getPassword()
    {
        return $this->password;
    }

    public function getDatabase()
    {
        return $this->database;
    }

    public function isConnected()
    {
        return (bool)$this->getMysqli();
    }

    public function getMysqli()
    {
        return $this->mysqli;
    }

    protected function connect()
    {
        $this->mysqli = new mysqli(
            $this->getHostname(), 
            $this->getUsername(), 
            $this->getPassword(),
            $this->getDatabase()
        );

        if ($mysqli->connect_error) {
            throw new Exception(sprintf(
                'Error while connecting: %s',
                $mysqli->connect_error
            ));
        }
    }
}

Comunque, a meno che non hai intenzione di mettere funzionalità aggiuntive, una classe del genere non ha senso, perché il tutto viene gestito nella stessa identica maniera da MySQLi.
 

Discussioni simili