Monday, May 14, 2007

The Template Pattern - PHP Mysql Class

The Template Pattern

The Template pattern describes a class that modifies the logic of a subclass to make it complete.

You can use the Template pattern to hide all the database-specific connection parameters in the previous classes from yourself. To use the class from the preceding section, you need to constantly specify the connection parameters:

<?php
require_once 'DB.inc';

define('DB_MYSQL_PROD_USER', 'test');
define('DB_MYSQL_PROD_PASS', 'test');
define('DB_MYSQL_PROD_DBHOST', 'localhost');
define('DB_MYSQL_PROD_DBNAME', 'test');

$dbh = new DB::Mysql(DB_MYSQL_PROD_USER, DB_MYSQL_PROD_PASS,
DB_MYSQL_PROD_DBHOST, DB_MYSQL_PROD_DBNAME);
$stmt = $dbh->execute("SELECT now()");
print_r($stmt->fetch_row());
?>

To avoid having to constantly specify your connection parameters, you can subclass DB_Mysql and hard-code the connection parameters for the test database:

class DB_Mysql_Test extends DB_Mysql {
protected $user = "testuser";
protected $pass = "testpass";
protected $dbhost = "localhost";
protected $dbname = "test";

public function _ _construct() { }
}

Similarly, you can do the same thing for the production instance:

class DB_Mysql_Prod extends DB_Mysql {
protected $user = "produser";
protected $pass = "prodpass";
protected $dbhost = "prod.db.example.com ";
protected $dbname = "prod";

public function _ _construct() { }
}

No comments: