// you’re reading...

Apache / PHP / MySQL

A PHP Factory Pattern Example

php-med-transRecently I was challenged on the fly to come up with an example of a factory pattern. Here is the result:


/**
 * Database Connection Example
 * @author randymelder
 */
interface DatabaseConnection {
    function connect();
}
class MySQLDatabaseConnection implements DatabaseConnection {
    var $link;
    var $user;
    var $pass;
    var $host;
    function __construct($host,$user,$pass)
    {
        $this->user = $user;
        $this->pass = $pass;
        $this->host = $host;
    }
    function connect()
    {
        try
        {
            $this->link = mysql_connect($this->host,$this->user,$this->pass,TRUE);
        } catch (Exception $e)
        {
            echo("Error establishing database connection in MySQLDatabaseConnection::connect() ".$e);
        }
        return $this->link;
    }
}
class PDODatabaseConnection implements DatabaseConnection {
    var $link;
    var $user;
    var $pass;
    var $host;
    function __construct($host,$user,$pass)
    {
        $this->user = $user;
        $this->pass = $pass;
        $this->host = $host;
    }
    function connect()
    {
        try
        {
            $this->link = new PDO($this->host, $this->user, $this->pass);
        } catch (Exception $e)
        {
            echo("Error establishing database connection in MySQLDatabaseConnection::connect() ".$e);
        }
        return $this->link;
    }
}
class DBConnectionFactory {
    function connect($type = 'MySQL',$host,$user,$pass)
    {
        $conn = NULL;
        $objtype = $type."DatabaseConnection";
        try {
            $conn = new $objtype($host,$user,$pass);
        } catch (Exception $e)
        {
            echo("Error creating connection from DBConnectionFactory ".$e);
        }
        return $conn->connect();
    }
}
//old school mysql
$mylink = DBConnectionFactory::connect("MySQL", "localhost", "test","test");
mysql_select_db("test",$mylink);
$query = "select author_id,name from authors";
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
    echo "\n".$row['author_id'].":".$row['name']." ";
}
echo "\n";
mysql_close($mylink);
//PDO
$mylink = DBConnectionFactory::connect("PDO", "mysql:host=localhost;dbname=test", "test","test");
$query = "select author_id,name from authors";
foreach($mylink->query($query) as $row) {
    echo "\n".$row['author_id'].":".$row['name']." ";
}
echo "\n";

Thoughts?

Discussion

No comments for “A PHP Factory Pattern Example”

Post a comment

 

December 2009
S M T W T F S
« Sep   Jan »
 12345
6789101112
13141516171819
20212223242526
2728293031