What is singleton in PHP?
- Singleton can be used like a global variable.
- It can have only one instance (object) of that class unlike normal class.
- When we don't want to create a more than one instance of a class like database connection or utility library we would go for singleton pattern.
- Singleton makes sure you would never have more than one instance of a class.
- Make a construct method private to make a class Singleton.
- If you don't want to instantiate a multiple copies of class but only one then you just put it in singleton pattern and you can just call methods of that class and that class will have only one copy of it in a memory even if you create another instance of it.
- If user just wants to connect to database then no need to create a another instance again if the instance already exist, you can just consume first object and make the connection happen.
e.g.
<?php
class DBConn {
private static $obj;
private final function __construct() {
echo __CLASS__ . " initializes only once\n";
}
public static function getConn() {
if(!isset(self::$obj)) {
self::$obj = new DBConn();
}
return self::$obj;
}
}
$obj1 = DBConn::getConn();
$obj2 = DBConn::getConn();
var_dump($obj1 == $obj2);
?>
Output:
DBConn initializes only once
bool(true)
Object1 and Object2 will point to the same instance
_______________________
| |
$obj1 ---->| Instance of DBConn |<----- $obj2
|_______________________|
Hope that helps!! :)
A singleton is a particular kind of class that, as you correctly said, can be instantiated only once.
First point: it isn't a PHP related concept but an OOP concept.
What "instantiated only once means?" It simply means that if an object of that class was already instantiated, the system will return it instead of creating new one. Why? Because, sometimes, you need a "common" instance (global one) or because instantiating a "copy" of an already existent object is useless.
Let's consider for first case a framework: on bootstrap operation you need to instantiate an object but you can (you have to) share it with other that request for a framework bootstrap.
For the second case let's consider a class that has only methods and no members (so basically no internal state). Maybe you could implement it as a static class, but if you want to follow design patterns, consider AbstractFactory) you should use objects. So, having some copy of the same object that has only methods isn't necessary and is also memory-wasting.
Those are two main reason to use singleton to me.