maturano: 
Nunca afirme que no se podía. En cuanto a tu código buen aporte, veo que estuviste haciendo la tarea en casa. Estoy convencido y no hay más peros.
  El código quedaría así:    
Código PHP:
Ver original<?php
/**
 * Represents a connection between PHP and a database server
 *
 */
final class Database extends PDO
{
    static private  $dns = DNS;
    static private  $username = USERNAME;
    static private  $passwd = PASSWD;
    static private  $options;
    static private  $instance;
    static private  $constructIsPrivate = true;
 
    /**
     * A private constructor; prevents direct creation of object
     *
     * @access static private
     */
    public function __construct()
    {
      if (self::$constructIsPrivate) {
         trigger_error('Call to private ' . __CLASS__ . '::__construct() from invalid context', E_USER_ERROR);       }
      try {
           parent::__construct(self::$dns, self::$username, self::$passwd/*, self::$options*/);
           $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      } catch (PDOException $e) {
           echo 'Connection failed: ' . $e->getMessage();
      }
    }
 
    /**
     * Create a instance of Database class with The singleton method
     *
     * @access static public
     * @return Database object
     */
     static public function getInstance()
     {
       if (!isset(self::$instance))        {
         self::$constructIsPrivate = false;
         $c = __CLASS__;
         self::$instance = new $c;
         self::$constructIsPrivate = true;
       }
        return self::$instance;
     }
 
    /**
     * Executes an SQL statement, returning a result set as a PDOStatement object
     *
     * @access public
     * @param  string $statement
     * @param  $PDO
     * @param  object $object
     * @return PDOStatement
     */
     public function query($statement, $PDO, $object)
     {
        return parent::query($statement, $PDO, $object);
     }
 
 
    /**
     * Prevent users to clone the instance
     *
     * @access public
     * @return string trigger_error
     */
    public function __clone()
    {
    }
}
?>