我需要多次实例化这个类吗?

When a user clicks a button, my script instantiates this class. so if there are fifty users on my website that click this button then there will be 50 of these classes that have been instantiated. is this the right thing to do? or do i need to check if this class has already been instantiated before and not do anything if it has been.

I connect to my db here. there is more to this class, this is just a snippet.

class Database{
    private $host      = "localhost";
    private $user      = "rt";
    private $pass      = "";
    private $dbname    = "db";

    public function __construct(){
        // Set DSN
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
        // Set options
        $options = array(
                PDO::ATTR_PERSISTENT    => true,
                PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
        );
        // Create a new PDO instanace
        try{
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
        }
        // Catch any errors
        catch(PDOException $e){
            $this->error = $e->getMessage();
        }
    }
}

You need to instantiate the class everytime you use different credentials (parameters). So, if every users creates new connection with different credentinals, then you need to instantiate everytime. Otherwise, you have to do proper checks and continue using same connection

is this the right thing to do?

Yes.
That's just how PHP works. 50 PHP instances runs, 50 connects to database established, etc.

do i need to check if this class has already been instantiated before

You can, but it would be pretty useless, as other user's click would be handled by a completely separate PHP process and you will have no access to it anyway.

Here is slightly improved version of constructor

public function __construct(){
    // Set DSN
    $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
    // Set options
    $options = array(
            PDO::ATTR_PERSISTENT    => true,
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
    );
    // Create a new PDO instanace
    $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}

Your PHP script needs to be run everytime a user loads the page, there is no way around instantiating a class everytime someone loads the page.

This is an inherent property of HTTP-based communications: statelessness; and PHP is run off the HTTP protocol, so it is subjected to it's limitations.

You can simulate states by using databases and sessions (which are basically just files storing information using a unique key as filename), but the PHP script itself will have to be subjected to HTTP's limitations of not having a state.

Hence, there is no way to keep your class in memory over several different connections.