Have only one instance of a class

oop, php

Solution

You could use a static variable to assign the Database class to and then use a if statement to check whether that variable has been instantiated.

There are many ways of doing this, but this is how I would do.

Database.php

public class Database
{
    private static $instance;

    private function __construct()
    {
        try {
           // PDO Here
           print("Connected!");
        } catch (PDOException $e) {
           die($e->getMessage());
        }
    }

    public static function getInstance()
    {
        // Check is $_instance has been set
        if(!isset(self::$instance)) 
        {
            // Creates sets object to instance
            self::$instance = new Database();
        }

        // Returns the instance
        return self::$instance;
    }
}

index.php

 Database::getInstance();
 Database::getInstance();

Will only print "Connected!" once because the instance variable has been instantiated.

I recommend you to read Singleton Pattern if you haven't heard of it. Look at the example codes they show, its not in PHP but it should be easy to understand.

EDIT:

In case you want to make the`getInstance` function short you can do the following.

return !isset(self::$instance) ? self::$instance = new self : self::$instance;

Problem

I was wondering how I can get one instance of the following db connection. For example, lets say this is my class in the file Database.php ``` public class Database { public function __construct() { try { // PDO Here print("Connected!"); } catch (PDOException $e) { die($e->getMessage()); } } } ``` index.php ``` Database(); Database(); ``` Result `Connected!Connected!` I want to instantiate the class only once even if I call it twice.

Original source

Related problems