Hoi Robin Peters
Leuk dat je bezig bent met het Object Georienteerd Programmeren. Dat dit moeilijk is zal ik niet ontkennen. Het is een heel andere denkwijze dan het ´normale´ programmeren. Opzich ben je goed op weg maar ik vraag me af of in elke method een try catch handig is.
Bij het maken van een applicatie is het uitdenken van deze een belangrijke stap. Ook vooruit denken speelt hierin een grote rol.
Je kunt nu maar 1 connectie met een bepaald soort database maken. Als je later wilt overgaan op een ander soort database moet je de code zodanig veranderen dat je beter een nieuwe kunt maken. Het is goed om hiervoor een voorziening voor te treffen, en een module te maken waarin het niet uitmaakt welke database type je gebruikt. Bekijk het script hieronder eens..
<?php
/**
* @package database
*
* @author Niels Kieviet <
[email protected]>
* @version $Revision v1.00$
* @copyright Copyright (c) 2010, Niels Kieviet
*/
/*
* Database interface
*/
interface database
{
/**
* Make connection with the database
*
* @param string $dbHost
* @param string $dbUser
* @param string $dbPass
* @param string $dbName
*/
public function connect( $db_host, $db_user, $db_pass, $db_name );
/**
* Run a Query
*/
public function query( $query );
}
/**
* DatabaseResult interface
*/
interface databaseResult
{
/**
* @return array
*/
public function fetch_assoc();
/**
* @return array
*/
public function fetch_all();
/**
* @return int
*/
public function rows();
/**
* @return int
*/
public function last_id();
}
/**
* Database exception class.
*/
class databaseException extends Exception
{
}
/**
* MySQL class.
*/
class MySQL implements database
{
/**
* @var array
*/
private $connection;
/**
* Make connection with a MySQL database
*/
public function connect( $db_host, $db_user, $db_pass, $db_name )
{
if( !$this->connection = mysql_connect( $db_host, $db_user, $db_pass, $db_name ) ) {
throw new databaseException( 'Connection with MySQL database failed' );
}
if( !mysql_select_db( $db_name, $this->connection ) ) {
throw new databaseException( 'Select database failed' );
}
}
/**
* Run Query
*
* @return MySQLResult
*/
public function query( $query )
{
$result = mysql_query( $query, $this->connection );
if( !$result ) {
throw new databaseException( mysql_error() );
}
return new MySQLResult( $result );
}
}
/**
* MySQLResult class.
*/
class MySQLResult implements databaseResult
{
/**
* @var array
*/
private $result;
/**
* Constructor.
*
* @param handler $result
*/
public function __construct( $result )
{
$this->$result = $result;
}
/**
* @return array
*/
public function fetch_assoc()
{
return mysql_fetch_assoc( $this->result );
}
/**
* @return array
*/
public function fetch_all()
{
$result = array();
while( $row = $this->fetch_assoc() ) {
$result[] = $row;
}
return $result;
}
/**
* @return int
*/
public function rows()
{
return mysql_num_rows( $this->result );
}
/**
* @return int
*/
public function last_id()
{
return mysql_insert_id( );
}
}
?>
Je zou ook eens naar PDO kunnen kijken. Dan ben je gelijk van het probleem af.
PS: Er kunnen fouten in zitten ik heb hem niet getest..