<?php
abstract class Database {
    protected $connection;
    function __construct(Connection $connection) {
        $this->connection = $connection;
    }
    abstract function getTables();
    function getVals($query) {
        $this->connection->query($query);
        // ...
    }
}

class DatabaseMysql extends Database {
    function getTables() {
        return $this->getVals("SHOW TABLES");
    }
}

interface Connection {
    function query($query);
}

class ConnectionMysql implements Connection {
    function query($query) {
        return mysql_query($query);
    }
}

$connection = new ConnectionMysql;
$database = new DatabaseMysql($connection);
$connection->query("");
$database->getTables();
$database->getVals("");